zoukankan      html  css  js  c++  java
  • js运动框架完成块的宽高透明度及颜色的渐变

      了解了运动框架完成块元素的宽高和透明度的变化的原理,我想着写一个颜色的变化来练习一下,不想写了很长时间才写出来,跟各位分享一下。

      颜色的变化是通过三元素渐变的方式完成的,通过构造json,使当前的颜色与目标颜色进行对比,实现渐变的过程。

    代码如下:

      1 <!DOCTYPE html>
      2 <html>
      3 <head lang="en">
      4     <meta charset="UTF-8">
      5     <title></title>
      6     <style>
      7         div{
      8             display: inline-block;
      9             width: 50px;
     10             height: 50px;
     11             background: rgb(220,254,235);
     12             position: absolute;
     13             top: 100px;
     14         }
     15     </style>
     16 </head>
     17 <body>
     18 <div style="left: 100px"></div>
     19 </body>
     20 </html>
     21 <script>
     22     //获取元素样式,并设置
     23     function getStyle(obj,attr,value){
     24         if(arguments.length == 2){
     25             if(obj.currentStyle){
     26                 return obj.currentStyle[attr];
     27             }else{
     28                 return getComputedStyle(obj,false)[attr];
     29             }
     30         }else if(arguments.length == 3){
     31             obj.style[attr] = value;
     32         }
     33     }
     38     //运动框架  透明度 + 颜色 + 基本
     39     function move(obj,json,fn){
     40         clearInterval(obj.timer);
     41 
     42         obj.timer = setInterval(function(){
     43             var bStop = true;
     44             for(var name in json){
     45                 var iCur = 0;
     46 
     47                 if(name == "opacity"){         //若name为opacity时
     48                     iCur = parseInt(parseFloat(getStyle(obj,name))*100);
     49                     var iSpeed = (json[name]*100 - iCur)/10;
     50                     iSpeed = iSpeed>0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
     51                     obj.style.opacity = (iCur + iSpeed)/100;
     52                     obj.style.filter = "alpha(opacity:" + iCur + iSpeed +")";
     53                 }else if(name == "background"){        //若name为background时(该部分代码完全自己所想,不代表标准模式,望有更好意见的访客能给出更好的意见)
     54                     //获取颜色的三元素 str = rgb(r,g,b)
     55                     function getColor(str){             //获取到背景色的三元素,进行拆分
     56                         var s = str.substring(4,str.length-1);
     57                         var arr = s.split(",");
     58                         var r = parseInt(arr[0]);
     59                         var g = parseInt(arr[1]);
     60                         var b = parseInt(arr[2]);
     61                         return {
     62                             red : r,
     63                             green : g,
     64                             blue : b
     65                         };
     66                     }
     67 
     68                     iCur = getStyle(obj,"background-color");  //当前背景色
     69                     var newStr = json[name];
     70                     var arr = [];    //定义一个数组,用来存放新的三元素的值
     71                     var newJson = {};  //将设置的背景色写成一个json,并与getColor相对应
     72                     newJson.red = getColor(newStr).red;
     73                     newJson.green = getColor(newStr).green;
     74                     newJson.blue = getColor(newStr).blue;
     75 
     76                     for(var name in newJson){    //newJson中循环,得到最新的三元素
     77                         var cur = parseInt(getColor(iCur)[name]);
     78                         var iSpeed = (newJson[name] - cur)/10;
     79                         iSpeed = iSpeed>0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
     80                         var tmp = cur + iSpeed;
     81                         arr.push(tmp);
     82                     }
     83                     obj.style.background = "rgb(" + arr[0] + ","+ arr[1] + ","+ arr[2] + ")";
     84                 }else{     //name为width height
     85                     iCur = parseInt(getStyle(obj,name));
     86                     var iSpeed = (json[name] - iCur)/10;
     87                     iSpeed = iSpeed>0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
     88                     obj.style[name] = iCur + iSpeed + "px";
     89                 }
     90                 if(iCur != json[name]) bStop = false;
     91             }
     92             if(bStop){
     93                 clearInterval(obj.timer);
     94                 if(fn) fn();
     95             }
     96         },30)
     97     }
     98 
     99     window.onload = function(){
    100         var oDiv = document.getElementsByTagName("div")[0];
    101 
    102         oDiv.onmouseover = function(){
    103             move(oDiv,{200,height:300,opacity:0.5,background:"rgb("+234+","+" "+ 124+","+" "+ 211+")"});
    104         }
    105     }
    106 </script>
  • 相关阅读:
    iterm2 Mac 常用快捷键
    软件测试:测试方法
    maccms(苹果cms)采集过程报错--MySQL server has gone away错误的解决办法
    ArrayLIst的使用
    hashmap的使用
    hashset机LinkedHashSet的使用
    java集合Collection总结
    maxPostSize属性改变tomcat的post请求的请求体大小设置
    postman中 form-data、x-www-form-urlencoded、raw、binary的区别
    用synchronized关键字及concurrent.locks解决线程并发问题
  • 原文地址:https://www.cnblogs.com/lahm8963/p/6224042.html
Copyright © 2011-2022 走看看