所谓“运动”不一定真的是运动,在连续的一段时间内改变某一样式都可以成为“运动”。

先写几个会用到的函数

//获取某一元素的指定样式
function getstyle (element, target) {
// body...
if (element.currentStyle) {
return element.currentStyle[target];
}else{
return window.getComputedStyle(element, null)[target];
}
}
//填充digits长度的十六进制数
function zero_fill_hex(num, digits) {
var s = num.toString(16);
while (s.length < digits)
s = "0" + s;
return s;
} //rgb颜色转成十六进制颜色
function rgb2hex(rgb) { if (rgb.charAt(0) == '#')
return rgb; var ds = rgb.split(/\D+/);
var decimal = Number(ds[1]) * 65536 + Number(ds[2]) * 256 + Number(ds[3]);
return "#" + zero_fill_hex(decimal, 6);
}

最后是“运动”框架部分

/*
*在连续时间内改变某一样式(运动框架)
*@element 要改变样式的元素
*@target 要改变的样式
*@end 目标样式最终的值
*@speed 改变的速度
*@flag 是否变速改变,true为变速,false为匀速
*/
function changeStyle (element, target, end, speed, flag) {
// body...
if(target.indexOf("color") != -1){
var begin = $$.getStyle(element, target)+"";
begin = rgb2hex(begin).replace(/#/, '');
end = end.replace(/#/, '');
speed = Math.ceil(Math.abs(parseInt(begin, 16)-parseInt(end, 16))/speed); clearInterval(element[target+"Timer"]);
element[target+"Timer"] = setInterval(function(){
var intBegin = parseInt(begin, 16);
var intEnd = parseInt(end, 16);
speed = intEnd > intBegin ? Math.abs(speed) : (-Math.abs(speed)); if (Math.abs(intBegin-intEnd) <= Math.abs(speed)) {
clearInterval(element[target+"Timer"]);
element.style[target] = '#'+end;
}else {
var sum = intBegin + speed
begin = sum.toString(16);
element.style[target] = '#' + zero_fill_hex(begin, 6);
}
}, 30);
}
else if (target == "opacity") {
var begin = $$.getStyle(element, target)+"";
clearInterval(element[target+"Timer"]);
element[target+"Timer"] = setInterval(function(){
if (Math.abs(begin-end) <= Math.abs(speed)){
clearInterval(element[target+"Timer"]);
element.style.opacity = end;
}else{
begin = begin*1.0 + speed;
element.style.opacity = begin;
}
}, 30);
}else{
var begin = $$.getStyle(element, target)+"";
console.log("begin--- "+begin);
begin = begin.replace(/px/g, '');
clearInterval(element[target+"Timer"]);
element[target+"Timer"] = setInterval(function(){
var realSpeed = Math.abs(end-begin)/speed;
realSpeed = realSpeed > 0 ? Math.ceil(realSpeed) : Math.floor(realSpeed); if (Math.abs(begin-end) <= Math.abs(realSpeed)){
clearInterval(element[target+"Timer"]);
element.style[target] = end + "px";
}else{
if (flag)
begin = begin*1.0 + realSpeed;
else
begin = begin*1.0 + speed;
element.style[target] = begin + "px";
console.log(target+" "+begin+" "+realSpeed);
}
}, 30);
}
}

纯js写“运动”框架的更多相关文章

  1. JS完美运动框架

    这套框架实现了多物体,任意值,链式运动,多值运动,基本满足常见的需求. /* 功能:完美运动框架,可以实现多物体,任意值,链式运动,多值运动 版本:V1.0 兼容性:Chrome,FF,IE8+ (o ...

  2. JS完美运动框架【利用了Json】

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. 纯手写Myatis框架

    1.接口层-和数据库交互的方式 MyBatis和数据库的交互有两种方式: 使用传统的MyBatis提供的API: 使用Mapper接口: 2.使用Mapper接口 MyBatis 将配置文件中的每一个 ...

  4. 使用纯js写的一个分页

    上图晒效果: 网上确实有很多分页的插件以及开源代码,单本是一个后台开发猿,前台css等样式还驾驭不住,所以就开始自己去写了.其实这个分页原理很简单,就是用ajax往后台传值(当前页码),后台使用lim ...

  5. 纯js写图片轮播插件

    最近终于写成了自己创作的图片轮播插件,使用原生js编写.与目前网上流行的轮播插件相比,功能和效果稍弱,但是使用起来相当方便. 先看html代码 <!DOCTYPE html> <ht ...

  6. 纯JS写最简单的图片轮播

    非常简单的一个大图轮播,通过将控制显示位置来进行轮播效果,写来给正在学习的新手朋友们参考交流. 先看效果:(实际效果没有这么快) 先看布局: <div id="display" ...

  7. 纯JS写出日历

    封装代码: (function(cmf){ cmf.showDcalendar=function(){ var fnname=cmf.fn var id="cmfrili2" va ...

  8. [JS思路]运动框架思路

    匀速运动的思路一: 1.先清除动画,再加载动画 2.方向dir有正值和负值,可以通过 目标值 > 当前值  往右移动,即正数 目标值 < 当前值  往右移动,即负数 来进行判断:dir = ...

  9. 纯JS写动态分页样式效果

    效果图如下: html: <body> <div> <table id="btnbox"> <tbody> <tr>&l ...

随机推荐

  1. backup archivelog all

     OLTP系统的生产库一般都是打开归档模式,当CUD操作频繁并且时常使用大批量处理时,每天的归档日志也是超级大的,如果长期保留这些归档日志磁盘空间消耗是很恐怖的,所以我们在使用RMAN进行数据库备份时 ...

  2. SharePoint Services 数据库表

    转:http://dugan.bokee.com/630446.html 以下是Microsoft Windows SharePoint Services架构中数据库列表. Configuration ...

  3. 惊人事实 z

  4. LR 录制时,web_link出现乱码

    在录制时,用到了web_link,但是web_link不能实别中文,因此在回放时,不能识别web_link,问题如下: web_link("??",   "Text=?? ...

  5. 多线程模式之MasterWorker模式

    多线程模式之MasterWorker模式 Master-Worker模式的核心思想是,系统由两类进程协作工作:Master进程和Worker进程.Master进程负责接收和分配任务,Worker进程负 ...

  6. F(x)

    Problem Description For a decimal number x with n digits (AnAn-1An-2 ... A2A1), we define its weight ...

  7. Linux下简单的socket通信实例

    Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...

  8. 给Sublime Text 2安装CTags插件

    以Windows操作系统为例介绍安装过程: 安装ctags应用程序. 到CTags的官方网站下载最新版本,解压后将ctags.exe文件放到系统的搜索路径中. 安装Sublime Text 2的Pac ...

  9. MTRR内存类型范围寄存器

    1.MTRR的概念 内存类型范围寄存器(MTRRs,翻译过来真别扭,后面都以MTRR直接来说了)提供了一种机制,这种机制其实就是确定在系统内存中物理一段内存的类型.这个类型其实是正对CPU来说的,见图 ...

  10. Quartz 定时器时间设置

    spring定时器的时间设置   时间的配置如下:<value>0 26 16 * * ?</value>    时间大小由小到大排列,从秒开始,顺序为 秒,分,时,天,月,年 ...