zoukankan      html  css  js  c++  java
  • javascript编程:取色器/封装$函数

    1.封装$函数

    function $(str){
                //如果传入的是'#' 则选择id标签
                //如果传入的是'.' 则选择所有的类名标签
                //如果传入的既不是'#也不是'.'  选择复合标签
                //判断传入的值
                if(typeof str !='string'){
                    console.log('传入的参数有误!');
                    return null;
                } 
                //获取参数的第一个字母
                var firstChar=str.charAt(0);
                var name=str.substr(1);
                switch(firstChar){
                    case '#':
                        console.log('id选择器');
                        return document.getElementById(name);
                        break;
                    case '.':
                        //类选择器:getElementsByClassName是在js中新加入的,对于老的ie6,ie7无法兼容
                        console.log('类选择器');
                        //兼容性
                        //1.判断是否能够使用getElementsByClassName
                        if(!document.getElementsByClassName){
                            return document.getElementsByClassName(name);
                        }else{
                            //2.获取所有的标签
                            //3.逐个判断是否带有该类名
                            //4.如果有则添加到数组中
                            var resultElements=[];
                            var elements=document.getElementsByTagName('*');
                            // console.log(element);
                            for(var i=0;i<elements.length;i++){
                                var element=elements[i];
                                var class_name=element.className.split(' ');
                                for(var j=0;j<class_name.length;j++){
                                    if(class_name[j]==name){
                                            //加入到数组中去
                                            resultElements.push(elements[i]);
                                            console.log(resultElements);
                                    }
                                }
                            }
                            return resultElements;
                        }
                        break;
                    default:
                        console.log('标签选择器');
                        name=str.substr(0);
                        return document.getElementsByTagName(name);
                }
            }

    2.取色器

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6     <script src="js/select.js"></script>
     7     <style>
     8         *{
     9             margin: 0;
    10             padding: 0;
    11         }
    12         #box{
    13             width: 300px;
    14             height: 300px;
    15             background:rgb(0,0,0);
    16             margin:20px;
    17         }
    18         #btn{
    19             padding:0 20px;
    20         }
    21         input{
    22             width: 100px;
    23         }
    24     </style>
    25     <script>
    26         //javascript的style属性只能获取内联样式,对于外部样式和嵌入式样式需要用currentStyle属性。但是,currentStyle在FIrefox和Chrome下不支持,需要使用如下兼容性代码
    27         HTMLElement.prototype.__defineGetter__("currentStyle", function () { 
    28             return this.ownerDocument.defaultView.getComputedStyle(this, null); 
    29         });
    30          
    31         function bgColor(obj){
    32             return  obj.currentStyle.backgroundColor;
    33         }
    34         function compare(color1,color2){
    35             if(color1>color2){
    36                 return -1;
    37             }else if(color1<color2){
    38                 return 1;
    39             }else{
    40                 return 0;
    41             }
    42         }
    43         window.onload=function(){
    44             
    45             var red;
    46             var green;
    47             var blue;
    48             var boxColor=[];
    49             $('#btn').onclick=function(){
    50                 red=Number($('#red').value);
    51                 green=Number($('#green').value);
    52                 blue=Number($('#blue').value);
    53                 boxColor=bgColor($('#box')).split('(');
    54                 boxColor=boxColor[1].split(')');
    55                 boxColor=boxColor[0].split(',');
    56                 if(red>255||red<0 || green>255||green<0 || blue>255||blue<0){
    57                     alert("颜色值出错了!");
    58                     return;
    59                 }
    60                 //变色定时器
    61                 var timer=setInterval(function(){
    62                     boxColor[0]=Number(boxColor[0])+compare(boxColor[0],red);
    63                     boxColor[1]=Number(boxColor[1])+compare(boxColor[1],green);
    64                     boxColor[2]=Number(boxColor[2])+compare(boxColor[2],blue);
    65                     $('#box').style.background='rgb('+boxColor[0]+','+boxColor[1]+','+boxColor[2]+')';
    66                     if(boxColor[0]==red&&boxColor[1]==green&&boxColor[2]==blue){
    67                         clearInterval(timer);
    68                     }
    69                 },10);
    70             }
    71         }
    72     </script>
    73 </head>
    74 <body>
    75     <div id="box"></div>
    76     red:<input type="text" id="red">
    77     green:<input type="text" id="green">
    78     blue:<input type="text" id="blue">
    79 
    80     <button id="btn">取色</button>
    81 </body>
    82 </html>
    取色器

     效果预览:https://happyn6j.github.io/Spectroscope.com/

  • 相关阅读:
    水平触发与边缘触发
    Leetcode935 骑士拨号器
    leetcodeF47 礼物的最大价值
    leetcodeF42 连续子数组的最大和
    leetcode12 矩阵中的路径 回溯算法
    leetcode14-II 剪绳子II DP 解法配合快速乘取模
    leetcode17.16 按摩师DP
    leetcode530 二叉树的最小绝对差
    PCB genesis大孔加小孔(即卸力孔)实现方法
    PCB genesis短槽加引导孔实现方法
  • 原文地址:https://www.cnblogs.com/nlj-blog/p/7308416.html
Copyright © 2011-2022 走看看