js运动框架完成块的宽高透明度及颜色的渐变
了解了运动框架完成块元素的宽高和透明度的变化的原理,我想着写一个颜色的变化来练习一下,不想写了很长时间才写出来,跟各位分享一下。
颜色的变化是通过三元素渐变的方式完成的,通过构造json,使当前的颜色与目标颜色进行对比,实现渐变的过程。
代码如下:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
div{
display: inline-block;
width: 50px;
height: 50px;
background: rgb(220,254,235);
position: absolute;
top: 100px;
}
</style>
</head>
<body>
<div style="left: 100px"></div>
</body>
</html>
<script>
//获取元素样式,并设置
function getStyle(obj,attr,value){
if(arguments.length == 2){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return getComputedStyle(obj,false)[attr];
}
}else if(arguments.length == 3){
obj.style[attr] = value;
}
}
//运动框架 透明度 + 颜色 + 基本
function move(obj,json,fn){
clearInterval(obj.timer); obj.timer = setInterval(function(){
var bStop = true;
for(var name in json){
var iCur = 0; if(name == "opacity"){ //若name为opacity时
iCur = parseInt(parseFloat(getStyle(obj,name))*100);
var iSpeed = (json[name]*100 - iCur)/10;
iSpeed = iSpeed>0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
obj.style.opacity = (iCur + iSpeed)/100;
obj.style.filter = "alpha(opacity:" + iCur + iSpeed +")";
}else if(name == "background"){ //若name为background时(该部分代码完全自己所想,不代表标准模式,望有更好意见的访客能给出更好的意见)
//获取颜色的三元素 str = rgb(r,g,b)
function getColor(str){ //获取到背景色的三元素,进行拆分
var s = str.substring(4,str.length-1);
var arr = s.split(",");
var r = parseInt(arr[0]);
var g = parseInt(arr[1]);
var b = parseInt(arr[2]);
return {
red : r,
green : g,
blue : b
};
} iCur = getStyle(obj,"background-color"); //当前背景色
var newStr = json[name];
var arr = []; //定义一个数组,用来存放新的三元素的值
var newJson = {}; //将设置的背景色写成一个json,并与getColor相对应
newJson.red = getColor(newStr).red;
newJson.green = getColor(newStr).green;
newJson.blue = getColor(newStr).blue; for(var name in newJson){ //newJson中循环,得到最新的三元素
var cur = parseInt(getColor(iCur)[name]);
var iSpeed = (newJson[name] - cur)/10;
iSpeed = iSpeed>0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
var tmp = cur + iSpeed;
arr.push(tmp);
}
obj.style.background = "rgb(" + arr[0] + ","+ arr[1] + ","+ arr[2] + ")";
}else{ //name为width height
iCur = parseInt(getStyle(obj,name));
var iSpeed = (json[name] - iCur)/10;
iSpeed = iSpeed>0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
obj.style[name] = iCur + iSpeed + "px";
}
if(iCur != json[name]) bStop = false;
}
if(bStop){
clearInterval(obj.timer);
if(fn) fn();
}
},30)
} window.onload = function(){
var oDiv = document.getElementsByTagName("div")[0]; oDiv.onmouseover = function(){
move(oDiv,{width:200,height:300,opacity:0.5,background:"rgb("+234+","+" "+ 124+","+" "+ 211+")"});
}
}
</script>
js运动框架完成块的宽高透明度及颜色的渐变的更多相关文章
- js运动框架之一条乱跑的虫子
克隆与运动框架的联合应用 效果:点击元素块后,元素块开始随机的向任何方向移动,并附带一堆颜色随机的"尾巴".每个方向运动3秒后改变方向,同时笑脸变哭脸. 如图所示: 朝某个方向运动 ...
- 带无缝滚动的轮播图(含JS运动框架)
今天学习了一下轮播图的写作,想到前一阵学过的无缝滚动得思想,所以就把轮播与滚动结合了一下.不过我的代码的神逻辑我自己都不敢恭维,在没网没参照的情况下,只能硬着头皮往下写,希望跟大家共勉吧. js运动框 ...
- js运动框架逐渐递进版
运动,其实就是在一段时间内改变left.right.width.height.opactiy的值,到达目的地之后停止. 现在按照以下步骤来进行我们的运动框架的封装: 匀速运动. 缓冲运动. 多物体运动 ...
- js运动框架 step by step
开启setInterval定时器之前,请先清除之前的定时器 window.onload = function() { var btn = document.getElementById('btn'); ...
- JS运动框架的封装过程(一)
给大家出一道题,从起点A走到目的地B,一共用了1000毫秒,每一次是30毫秒,请问你在这里面得到了哪些信息? 信息有哪些呢? 第一个,总时长是:1000毫秒 第二个,多久时间走一次?30毫秒 第三个, ...
- js 运动框架及实例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js运动框架之掉落的扑克牌(重心、弹起效果)
玩过电脑自带纸牌游戏的同志们应该都知道,游戏过关后扑克牌会依次从上空掉落,落下后又弹起,直至"滚出"屏幕. 效果如图: 这个案例的具体效果就是:点击开始运动,纸牌会从右上角掉 ...
- 完美的js运动框架
//完美运动框架, 对象,json,函数function move(obj,json,funEnd){clearInterval(obj.timer);//清除定时器obj.timer= setInt ...
- js 运动框架-轻量级
具体代码如下: function move(obj,json,sv,fnEnd){ //CSS样式值 function getStyle(obj,attr){ if(obj.currentStyle) ...
随机推荐
- 项目中创建单元测试—VS2012
我们在每个项目的开发过程中,开发完一个功能,自己首先需要测试一下,VS提供了很方便的测试功能,可以很容易的创建单元测试,但是在VS2012中类名上点击右键没有『创建单元测试』这个菜单,需要先进行设置一 ...
- nginx日志分析利器GoAccess
面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记 ...
- 关于mongoDB的思考和nodeJS执行windows系统命令
P1:在cnodejs.org上面看到有人问这个问题: 然后对此产生思考,第一句db.artile.find('uid':id) 然后问后台是否是这样查询,后台告诉我不是,这种写法就是违背非关系型数据 ...
- NotePad++ 调试PHP代码中文显示乱码
最近在NotePad++上调试PHP代码,按照示例代码进行调试,结果在显示中文的时候显示一堆乱码,于是上网百度,有2种方法可以解决: 按调试方式有2种方法: 1.菜单插件-NppExec: " ...
- 利用jQuery和CSS实现环形进度条
实现原理 原理非常的简单,在这个方案中,最主要使用了CSS3的transform中的rotate和CSS3的clip两个属性.用他们来实现半圆和旋转效果. 半环的实现 先来看其结构. HTML < ...
- matlab小段代码学习
matlab读hdf文件到txt filename='E:\data\H1BDLD10110607231863921.L2B.HDF'; h=hdftool(filename); Latitude = ...
- 使用navigator.geolocation来获取用户的地理位置信息
使用navigator.geolocation来获取用户的地理位置信息 W3C 中新添加了一个名为 Geolocation的 API 规范,Geoloaction API的作用就是通过浏览器获取用户的 ...
- (转)COM组件里的AddRef()
D3D是 COM组件,它在服务进程中运行,而不在当前的客户进程中.在DX组件运行过程中,要创建一系列接口对象,如CreateDevice()返回接口指针,这些接口及其占用内存什么时候释放,要通过“引用 ...
- JSon转化为DaTable
/// <summary> /// 将json转换为DataTable /// </summary> /// <param name="strJson" ...
- css中的背景、边框、补丁相关属性
css中的背景.边框.补丁相关属性 关于背景涉及到背景颜色与背景图片 背景颜色background-color即可设定: 背景图片background-image即可设定: 但是背景图片还涉及到其他的 ...