一步步教你实现跨游览器的颜色选择器

原文:http://www.cnblogs.com/rubylouvre/archive/2009/07/24/1530264.html#2580430

<!doctype html>
<html dir="ltr" lang="zh-CN">
    <head>
        <meta charset="utf-8"/>
        <meta http-equiv="X-UA-Compatible" content="IE=Edge">
        <style type="text/css">
        </style>
    </head>
    <body bgcolor="#D5F3F4">

        <div id="result"></div>
        <script type="text/javascript">
            var addSheet = function(){
                var doc,cssCode;
                if(arguments.length == 1){
                    doc = document;
                    cssCode = arguments[0];
                }else if(arguments.length == 2){
                    doc = arguments[0];
                    cssCode = arguments[1];
                }else{
                    alert("addSheet函数最多接受两个参数!");
                }
                var headElement = doc.getElementsByTagName("head")[0];
                var styleElements = headElement.getElementsByTagName("style");
                if(styleElements.length == 0){/*如果不存在style元素则创建*/
                    if(!+"\v1"){    //ie
                        doc.createStyleSheet();
                    }else{
                        var tempStyleElement = doc.createElement(‘style‘);//w3c
                        tempStyleElement.setAttribute("type", "text/css");
                        headElement.appendChild(tempStyleElement);
                    }
                }
                var  styleElement = styleElements[0];
                var media = styleElement.getAttribute("media");
                if(media != null && !/screen/.test(media.toLowerCase()) ){
                    styleElement.setAttribute("media","screen");
                }
                if(!+"\v1"){    //ie
                    styleElement.styleSheet.cssText += cssCode;
                }else if(/a/[-1]==‘a‘){
                    styleElement.innerHTML += cssCode;//火狐支持直接innerHTML添加样式表字串
                }else{
                    styleElement.appendChild(doc.createTextNode(cssCode))
                }
            }
            var Class = {
                create: function() {
                    return function() {
                        this.initialize.apply(this, arguments);
                    }
                }
            }
            var extend = function(destination, source) {
                for (var property in source) {
                    destination[property] = source[property];
                }
                return destination;
            }
            var ColorPicker =  Class.create();//我们的富文本编辑器类
            ColorPicker.prototype = {
                initialize:function(options){
                    this.setOptions(options);
                    this.drawPicker(this.options.textfield_id);
                },
                setOptions:function(options){
                    this.options = { //这里集中设置默认属性
                        id:‘colorpicker‘+ new Date().getTime(),
                        textfield_id:null//用于textarea的ID,也就是我们的必选项
                    }
                    extend(this.options, options || {});//这里是用来重写默认属性
                },
                ID:function(id){
                    return document.getElementById(id)
                },//getElementById的快捷方式
                TN:function(tn){
                    return document.getElementsByTagName(tn)
                },//getElementsByTagName的快捷方式
                CE:function(s){
                    return document.createElement(s)
                },//createElement的快捷方式
                hide:function(el){
                    el.style.display = ‘none‘;
                },
                show:function(el){
                    el.style.display = ‘block‘;
                },
                //用于生成颜色选择器的具体内容
                colorPickerHtml : function(){
                    var  _hex = [‘FF‘, ‘CC‘, ‘99‘, ‘66‘, ‘33‘, ‘00‘];
                    var builder = [];
                    // 呈现一个颜色格
                    var _drawCell = function(builder, red, green, blue){
                        builder.push(‘<td bgcolor="‘);
                        builder.push(‘#‘ + red + green + blue);
                        builder.push(‘" unselectable="on"></td>‘);
                    };
                    // 呈现一行颜色
                    var _drawRow = function(builder, red, blue){
                        builder.push(‘<tr>‘);
                        for (var i = 0; i < 6; ++i) {
                            _drawCell(builder, red, _hex[i], blue)
                        }
                        builder.push(‘</tr>‘);
                    };
                    // 呈现六个颜色区之一
                    var _drawTable = function(builder, blue){
                        builder.push(‘<table class="cell" unselectable="on">‘);
                        for (var i = 0; i < 6; ++i) {
                            _drawRow(builder, _hex[i], blue)
                        }
                        builder.push(‘</table>‘);
                    };
                    //开始创建
                    builder.push(‘<table><tr>‘);
                    for (var i = 0; i < 3; ++i) {
                        builder.push(‘<td>‘);
                        _drawTable(builder, _hex[i]);
                        builder.push(‘</td>‘);
                    }
                    builder.push(‘</tr><tr>‘);
                    for (var i = 3; i < 6; ++i) {
                        builder.push(‘<td>‘);
                        _drawTable(builder, _hex[i])
                        builder.push(‘</td>‘);
                    }
                    builder.push(‘</tr></table>‘);
                    builder.push(‘<table id="color_result"><tr><td id="color_view"></td><td id="color_code"></td></tr></table>‘);
                    return builder.join(‘‘);
                },
                addEvent:function(el, type, fn ) {
                    if(!+"\v1") {
                        el[‘e‘+type+fn]=fn;
                        el.attachEvent( ‘on‘+type, function() {
                            el[‘e‘+type+fn]();
                        } );
                    }else{
                        el.addEventListener( type, fn, false );
                    }
                },
                drawPicker:function(id){
                    var $ = this,
                    textfield = $.ID(id),
                    colorPicker = $.CE("div");
                    colorPicker.className = "colorpicker";
                    colorPicker.innerHTML = $.colorPickerHtml();
                    textfield.parentNode.insertBefore(colorPicker,null);
                    $.hide(colorPicker);
                    $.addEvent(textfield,‘focus‘,function(){
                        textfield.style.position = ‘relative‘;
                        $.show(colorPicker);
                        var l = textfield.offsetLeft + ‘px‘,
                        t = (textfield.clientHeight + textfield.offsetTop)+ ‘px‘;
                        if(/msie|MSIE 6/.test(navigator.userAgent)){
                            var iframe = $.CE("<iframe id=‘picker_mask‘ style=‘left:"+l
                                +";width:220px;filter:mask();position:absolute;"+";top:"+t
                                +"height:180px;z-index:1;‘></iframe>");//z-index不能为负数
                            textfield.insertAdjacentElement(‘afterEnd‘,iframe);
                        }
                        colorPicker.style.left =l ;
                        colorPicker.style.top = t ;
                    })
                    $.addEvent(colorPicker,‘mouseover‘,function(){
                        var e = arguments[0] || window.event,
                        td = e.srcElement ? e.srcElement : e.target,
                        nn = td.nodeName.toLowerCase(),
                        colorView = $.ID(‘color_view‘),
                        colorCode = $.ID(‘color_code‘);
                        if( ‘td‘ == nn){
                            colorView.style.backgroundColor = td.bgColor;
                             !+"\v1"? (colorCode.innerText = td.bgColor):(colorCode.innerHTML = td.bgColor);
                        }
                    });
                    $.addEvent(colorPicker,‘click‘,function(){
                        var e = arguments[0] || window.event,
                        td = e.srcElement ? e.srcElement : e.target,
                        nn = td.nodeName.toLowerCase();
                        if(nn == ‘td‘){
                            textfield.value = td.bgColor;
                            $.hide(colorPicker);
                            var iframe =  $.ID("picker_mask");
                            iframe && iframe.parentNode.removeChild(iframe);
                        }
                    });

                    addSheet(‘          div.colorpicker {display:none;position:absolute;width:216px;border:2px solid #c3c9cf;background:#f8f8f8;}          div.colorpicker table{border-collapse:collapse;margin:0;padding:0;width:100%;}          div.colorpicker .cell td{height:12px;width:12px;}          div.colorpicker  table td {padding:0!important;}          #color_result{width:216px;}          #color_view{width:110px;height:25px;}‘);
                }
            }
            window.onload = function(){
                new ColorPicker({textfield_id:"color"});
            }
        </script>
        <input id="color" type="text"><br />
        <select>
            <option>
                看能否挡住!
            </option>
        </select><br  />
        <input type="password" value="" />
    </body>
</html>
时间: 2024-10-21 22:43:00

一步步教你实现跨游览器的颜色选择器的相关文章

纯CSS无hacks的跨游览器多列布局

利用纯CSS创建一个等高多列的布局并不件易事,本教程将着重分析出现在多列布局的多个问题,然后为大家等来一个简单全游览器通吃的解决方法,不使用图片,脚本,CSS hacks并在最严格的XHTML 规范中都能通过验证. 问题的症结所在 如上图所示,由于各列的内容不一致导致其背景的高度也不统一.而背景实质上是内容(标准的盒子模型是由内容区,补白区,边框区与边界区组成,背景存在于前三者中:IE为前两者)的自适应的问题.再转化一下,如何撑大那些较短的列的高度,让所有列的高度等于最高的列的高度?这个,的确很

谷歌游览器对&lt;input type=&#39;file&#39;&gt; change只能响应1次解决和样式的改变

在项目过程中遇到的需要上传本地文件,file的原始控件不太美观,但是这个控件和button有点不太一样, 改变这个样式的思路就是在控件外面套一层链接,然后把file控件的透明度设置为0(透明).样式只需要对外面那层进行操作就行. html代码: <td style="text-align: left;"> <a href="javascript:;" class="file">选择文件 <input type=&qu

一步步教你js原生瀑布流效果实现

一步步教你js原生瀑布流效果实现 什么是瀑布流效果 首先,让我们先看一段动画: 在动画中,我们不难发现,这个动画有以下特点: 1.所有的图片的宽度都是一样的 2.所有的图片的高度是不一样的 3.图片一张挨着一张竖直排列 4.鼠标向下滚动,一直不停的加载图片 5.浏览器的宽度改变,图片的列数会进行相应的更改 那么这种效果类似现实生活中的瀑布,所以我们叫它瀑布流的效果. Js原生瀑布流效果的实现 从上述分析中,我们可以把整个效果分为以下四个部分: html+css界面搭建 瀑布流效果 浏览器向下滚动

js判断游览器是移动端还是PC端

js判断网页游览器是移动端还是PC端 1 <script type="text/javascript"> 2 function browserRedirect() { 3 var sUserAgent = navigator.userAgent.toLowerCase(); 4 var bIsIpad = sUserAgent.match(/ipad/i) == "ipad"; 5 var bIsIphoneOs = sUserAgent.match(/

移动端游览器自适应代码

移动端游览器自适应调整 1 <script type="text/javascript">// <![CDATA[ 2 var jsVer = 28; 3 4 var phoneWidth = parseInt(window.screen.width); 5 6 var phoneScale = phoneWidth / 640; 7 8 var ua = navigator.userAgent; 9 10 if (/Android (\d+\.\d+)/.test(

游览器保存密码和自动填充密码的困惑 (browser save password and auto fill password )

原文 refer : http://www.cnblogs.com/happyfreelife/p/4240100.html 当一个带有username and password 的表单被提交, 游览器会智能的询问用户是否要保存密码. 如果开发人员不希望这“智能”的事儿,可以使用ajax去提交表单,这样游览器就不会“智能”了. “ 当允许浏览器保存该网站的密码之后,下次打开该网站的任何一个页面时,浏览器会自动检测该页面是否有 password元素 ,如果有或者有多个,则自动填充对应的上次已保存的

关于火狐游览器设置全屏状态不显示工具栏以及其他游览器全屏问题

无论是IE,火狐,还是谷歌游览器.按F11可以实现全屏状态显示,再次按F11可以回到原先的网页显示状态. 清楚游览器缓存快捷键:ctrl+shift+delete 实现火狐游览器在全屏状态显示工具栏的方法: 第一步打开火狐游览器:输入about:config如下图: 单击"我保证小心"打开如下网页并找到browser.fullscreen.autohide将此后面的"值"修改为"false"即可在全屏状态下显示工具栏.如下图所示: 之后将游览器关

C# 调用动态链接库,给游览器写入Cookie

给游览器写入Cookie class Program { /// <summary> /// 写 /// </summary> /// <param name="lpszUrlName"></param> /// <param name="lbszCookieName"></param> /// <param name="lpszCookieData"></

在游览器上可以连网,Ionic打包后不能连接网络

在游览器上可以连网,Ionic打包后不能连接网络.可能是没有安装cordova-plugin-whitelist插件.  解决方案: