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,{width:200,height:300,opacity:0.5,background:"rgb("+234+","+" "+ 124+","+" "+ 211+")"});
104         }
105     }
106 </script>
时间: 2024-10-12 23:15:16

js运动框架完成块的宽高透明度及颜色的渐变的相关文章

带无缝滚动的轮播图(含JS运动框架)

今天学习了一下轮播图的写作,想到前一阵学过的无缝滚动得思想,所以就把轮播与滚动结合了一下.不过我的代码的神逻辑我自己都不敢恭维,在没网没参照的情况下,只能硬着头皮往下写,希望跟大家共勉吧. js运动框架的代码如下: 1 //获取样式 2 function getStyle(obj,attr){ 3 if(obj.currentStyle){ 4 return obj.currentStyle[attr]; 5 }else{ 6 return getComputedStyle(obj,false)

js运动框架逐渐递进版

运动,其实就是在一段时间内改变left.right.width.height.opactiy的值,到达目的地之后停止. 现在按照以下步骤来进行我们的运动框架的封装: 匀速运动. 缓冲运动. 多物体运动. 任意值变化. 链式运动. 同时运动 (第一部分):匀速运动 运动基础 思考:如何让div动起来?如下: 设置元素为绝对定位,只有绝对定位后,left,top等值才生效. 定时器的使用(动态改变值),这里使用setInterval()每隔指定的时间执行代码. 计时器setInterval(函数,交

js 运动框架及实例

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>运动框架</title> &l

js运动框架之掉落的扑克牌(重心、弹起效果)

玩过电脑自带纸牌游戏的同志们应该都知道,游戏过关后扑克牌会依次从上空掉落,落下后又弹起,直至"滚出"屏幕. 效果如图:    这个案例的具体效果就是:点击开始运动,纸牌会从右上角掉落下来,之后弹起,运动的速度会逐渐减慢,直到越出屏幕后,全部纸牌消失,在右上角会重新出现一张纸牌,继续动作,一再往复. 具体代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta ch

JS运动框架

本人也是菜鸟一枚,从网上搜索了很久,封装备注了一套运动框架,加强大家对此的理解,希望多多提议. getId:function(elemId){ return document.getElementById(elemId); }, getStyle:function(obj,attr){ return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj, false)[attr]; }, startMove:function(o

带无缝滚动的轮播图(含JS运动框架)-简洁版

昨天写的神逻辑,今天终于解决,经过大家的商讨,终于研究出来一套简单的代码!!! js代码如下: 1 <script> 2 window.onload = function() { 3 var oWrap = document.getElementById("wrap"); 4 var oBox = document.getElementById("box"); 5 var aBox = oBox.getElementsByTagName("li

js运动框架tween

<!DOCTYPE html> <html> <head> <title>myAnimate</title> <style> *{ margin: 0; padding: 0; list-style: none; } #abc{ position: absolute; top: 50px; left: 50px; width: 100px; height: 100px; background-color: #ff4500; } <

js 运动框架

/** * 使用offsetLeft,需注意margin的使用 * offsetLeft = margin-left + left; * offsetWidth= padding + border + width; * * @author Lonve */ function getStyle(elem,attr){ var result = null; result = elem.currentStyle?elem.currentStyle[attr]:getComputedStyle(elem

JS运动学习笔记 -- 任意值的运动框架(高/宽度,背景颜色,文本内容,透明度等)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>任意值的运动框架</title> <style> div { float: left; width: 200px; height: 200px; margin: 20px; background-color: yellow; border: 1p