`
highzhu
  • 浏览: 10798 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

纯js实现取色器控件

阅读更多
function getColor(e){

    obj = document.all ? event.srcElement : e.target;
    obj.style.position = "relative";
    var inputTop = getTop(obj);
    var inputLeft = getLeft(obj);
    
    var htmlStr = "visibility:visible;position:absolute;";
    //
    var colorPacker = document.getElementById("colorPacker");
    var colorPackerShadow = document.getElementById("colorPackerShadow");

    if (!colorPacker) {
        colorPacker = document.createElement("div");
        colorPackerShadow = document.createElement("div");

        colorPacker.id = "colorPacker";
        colorPackerShadow.id = "colorPackerShadow";
		
        colorPacker.style.cssText = htmlStr;
		colorPackerShadow.style.cssText = htmlStr+"opacity:0.3;filter:alpha(opacity=20);";
		
        colorPacker.style.zIndex = 34535;
		colorPackerShadow.style.zIndex = 34534;
        
		colorPacker.style.backgroundColor = "#6997EF" ;
		colorPackerShadow.style.backgroundColor = "#000000" ;
		
		colorPacker.style.height = "115px";
		colorPackerShadow.style.height = "115px";
		
		colorPacker.style.width = "165px";
		colorPackerShadow.style.width = "165px";
		
		var titleStyle = "width:95%;background:#6997EF;color:#ffffff;font-size:12px;margin-left:5px;";
		var contetnStyle = "width:95%;text-align:center;margin:auto;background:#6997EF;" ;
		
		var colorPackerTitle = "<div style='"+titleStyle+"'>取色器</div>" ;
		var colorPackerContent = "<div style='"+contetnStyle+"'>"+bulid()+"<div>" ;
		
        document.body.appendChild(colorPacker);
        document.body.appendChild(colorPackerShadow);
		
        colorPacker.innerHTML = colorPackerTitle+ colorPackerContent;
        
    }
    else {
        document.getElementById("colorPacker").style.visibility = "visible";
		document.getElementById("colorPackerShadow").style.visibility = "visible";
		
    }
	
    colorPacker.style.left = (inputLeft) + "px";
    colorPacker.style.top = (inputTop + obj.clientHeight) + "px";

    colorPackerShadow.style.left = (inputLeft+2) + "px";
    colorPackerShadow.style.top = (inputTop + obj.clientHeight+2) + "px";
    
	if(!colorPacker.onclick){
	    colorPacker.onclick = function(oEvent){
	        e = oEvent || window.event;
			var ev = document.all ? event.srcElement : e.target ;
			
			obj.style.backgroundColor = ev.bgColor;
			
			this.style.visibility = "hidden";
			document.getElementById("colorPackerShadow").style.visibility = "hidden";
	        if (document.all) {
	            e.cancelBubble = true;
	        }
	        else {
	            e.stopPropagation();
	        }
	    };
	}
	if(!document.all){
		colorPacker.setAttribute('flag','flag');
		colorPackerShadow.setAttribute('flag','flag');
		obj.setAttribute('flag','flag');

	}else{
		colorPacker.flag = "flag";
		colorPackerShadow.flag = "flag";
		obj.flag = "flag";
		
	}

	if(!document.onclick){
		document.onclick = function(e){
			var ev = document.all ? event.srcElement : e.target ;
			
			if (ev.getAttribute("flag")==null){
				document.getElementById("colorPacker").style.visibility = "hidden";
				document.getElementById("colorPackerShadow").style.visibility = "hidden";
			}
		};
	}
    
}

var hexch = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
var cnum = new Array(1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0);

function ToHex(n){
    var h, l;
    
    n = Math.round(n);
    l = n % 16;
    h = Math.floor((n / 16)) % 16;
    return (hexch[h] + hexch[l]);
}

function DoColor(c, l){
    var r, g, b;
    
    r = '0x' + c.substring(1, 3);
    g = '0x' + c.substring(3, 5);
    b = '0x' + c.substring(5, 7);
    
    if (l > 120) {
        l = l - 120;
        
        r = (r * (120 - l) + 255 * l) / 120;
        g = (g * (120 - l) + 255 * l) / 120;
        b = (b * (120 - l) + 255 * l) / 120;
    }
    else {
        r = (r * l) / 120;
        g = (g * l) / 120;
        b = (b * l) / 120;
    }
    
    return '#' + ToHex(r) + ToHex(g) + ToHex(b);
}

function wc(r, g, b, n){
    r = ((r * 16 + r) * 3 * (15 - n) + 0x80 * n) / 15;
    g = ((g * 16 + g) * 3 * (15 - n) + 0x80 * n) / 15;
    b = ((b * 16 + b) * 3 * (15 - n) + 0x80 * n) / 15;
    
    return '<TD  BGCOLOR=#' + ToHex(r) + ToHex(g) + ToHex(b) + ' height=6 width=6></TD>';
}

function bulid(){
    var trStr = "<table CELLPADDING=0 CELLSPACING=0>";
    for (i = 0; i < 16; i++) {
        trStr += '<TR>';
        for (j = 0; j < 30; j++) {
            n1 = j % 5;
            n2 = Math.floor(j / 5) * 3;
            n3 = n2 + 3;
            
            trStr += wc((cnum[n3] * n1 + cnum[n2] * (5 - n1)), (cnum[n3 + 1] * n1 + cnum[n2 + 1] * (5 - n1)), (cnum[n3 + 2] * n1 + cnum[n2 + 2] * (5 - n1)), i);
        }
        
        trStr += '</TR>';
    }
    trStr += "</table>";
    return trStr;
    
}

function getTop(e){
    var offset = e.offsetTop;
    if (e.offsetParent != null) 
        offset += getTop(e.offsetParent);
    return offset;
}

function getLeft(e){
    var offset = e.offsetLeft;
    if (e.offsetParent != null) 
        offset += getLeft(e.offsetParent);
    return offset;
}




getColor这个接口可以绑定于一个html控件之上,实现该控件的背影色变化,颜色算法是从网上一个控件改来的。如果是直接在页面上调用getColor则必须使用getColor(event)方式,不然在firefox下不能使用该控件。目前没有黑色与白色的选择,因为方案还没有确定。

第一次发控件,有不足之处,多多指教。
分享到:
评论

相关推荐

    纯js实现的日期选择控件

    这是一个纯js实现的日期选择控件,页面效果不错

    C#调色板取色器控件

    在C#编程中,开发人员有时需要创建自定义控件以满足特定的用户界面需求,例如实现一个调色板取色器。这个控件能够帮助用户从丰富的颜色库中选择所需的颜色,类似于图像编辑软件Photoshop中的功能。下面将详细讨论...

    一个值得推荐的漂亮的基于纯JS及时实现的颜色选择控件源码例子

    总的来说,这个“基于纯JS实时实现的颜色选择控件”示例展示了如何用JavaScript优雅地解决用户界面中的常见问题。它不仅提高了用户体验,而且在性能和可维护性方面也表现出色,对于任何需要颜色选择功能的前端开发者...

    日期控件 纯js 日期控件 纯js

    下面将详细讨论纯JavaScript实现日期控件的关键知识点。 1. **HTML结构**: 创建日期输入的基础HTML结构,通常使用`&lt;input type="date"&gt;`标签。但为了实现自定义样式和交互,可能需要额外的容器元素,如`&lt;div&gt;`,...

    纯js日期控件,使用简单

    本教程将详细讲解一个基于纯JavaScript实现的日期控件,其特点在于使用简单,无需依赖任何外部库。 1. **纯JavaScript实现** 这个日期控件完全由JavaScript编写,不依赖jQuery或其他JavaScript框架,这使得它在...

    安卓手绘图片处理画板相关-自定义控件-颜色取色器.rar

    "安卓手绘图片处理画板相关-自定义控件-颜色取色器.rar" 这个压缩包文件,显然包含了创建一个用于手绘图片处理的画板应用中的关键组件——颜色取色器。颜色取色器是让用户能够选择和设定颜色的工具,常见于各种图像...

    javascript实现的日期控件

    本篇将详细介绍如何使用JavaScript实现一个日期控件。 1. **HTML基础** 首先,我们需要在HTML页面中创建一个用于显示日期控件的容器。可以使用`&lt;input&gt;`标签,并设置`type="date"`,这样浏览器会自动提供一个基本...

    一个纯js开发的日历、日程控件

    这个压缩包文件提供了一个纯JavaScript开发的日历和日程控件,这意味着它不依赖任何特定的库或框架,如jQuery或其他重型库,而是完全基于JavaScript语言本身构建的。这使得它具有轻量级、快速加载的特点,并且可以在...

    简易mfc取色器

    在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)构建一个简易的取色器应用,该应用基于API函数实现类似QQ截图和Photoshop的取色功能。首先,我们来了解一下MFC。 MFC是微软提供的一套C++类库...

    Android取色器 调色板 颜色选择器

    采用kotlin代码实现,代码简单易懂,采用接口方式回调结果,已经封装好,方便移植。具有以下特性: 1、支持点击选色,滑动选色,且支持实时预览 2、颜色分解为Alpha及RGB 四通道 更加直观 3、支持4通道分别调色,...

    js实现txt控件实现时间控件

    在这个案例中,我们提到的"时间控件"可能是通过纯JS实现的一个自定义组件,它可以显示日历视图,并允许用户选择日期和时间。 首先,我们需要创建HTML结构来呈现这个时间控件。这可能包括一个输入框,用于用户交互,...

    纯JS日历,月历控件

    本项目提供了一个纯JavaScript实现的日历和月历控件,无需依赖任何外部库,如jQuery或其他框架,使得它可以在各种环境中轻松集成。 一、纯JavaScript日历控件 纯JS日历控件是一种动态生成的UI组件,用于展示一个...

    javascript实现日期控件

    用js实现的日期控件,只需要包含js即可,应用方便

    js移动端日期时间选择控件

    在JavaScript(特别是原生JS)中,我们可以创建自定义的日期时间选择器,或者利用现有的开源库来实现这一功能。 在JavaScript中,`Date` 对象是处理日期和时间的基础。通过实例化 `Date` 对象,我们可以获取当前...

    很实用的纯JS日期控件

    总之,纯JS日期控件的核心是利用JavaScript的`Date`对象进行日期处理,并通过DOM操作和事件监听来实现用户交互。理解这些基本概念和技巧,可以帮助你构建出功能强大且自定义程度高的日期选择器。

    js实现日期控件

    js实现日期选择控件,准确方便在文本框输入日期,演示,源代码

    js实现的日期控件

    以下是一个关于使用JavaScript实现日历控件的知识点详解: 1. **基础概念**: - **事件监听器**:JavaScript通过事件监听器来响应用户的操作,例如点击事件(click)。当用户点击文本框时,可以触发弹出日历的功能...

    VB后台取色控件使用范例(控件开源).rar

    "VB后台取色控件"可能是一个独立的控件库,包含自定义控件的定义和实现,开发者可以将其添加到VB工程中,快速地在界面上添加取色功能。"成品测试"可能是一个编译后的可执行文件,供用户验证取色功能是否正常工作。 ...

    一个很漂亮的基于纯js实现的color-picker控件源码例子程序

    【标题解析】 "一个很漂亮的基于纯js实现的color-picker控件源码...对于想要学习或优化自己颜色选择器实现的开发者来说,这是一个非常有价值的参考资料,可以帮助他们深入理解Web前端开发中动态交互控件的实现细节。

    纯JS类似批量上传控件

    综上所述,实现一个纯JavaScript的批量上传控件涉及了前端和后端的技术,需要理解HTML5 File API、JavaScript事件处理、AJAX、进度条实现以及ASP.NET服务器端处理等多个方面。这样的控件旨在提供高效、安全且用户...

Global site tag (gtag.js) - Google Analytics