纯js写“运动”框架
所谓“运动”不一定真的是运动,在连续的一段时间内改变某一样式都可以成为“运动”。
先写几个会用到的函数
//获取某一元素的指定样式
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写“运动”框架的更多相关文章
- JS完美运动框架
这套框架实现了多物体,任意值,链式运动,多值运动,基本满足常见的需求. /* 功能:完美运动框架,可以实现多物体,任意值,链式运动,多值运动 版本:V1.0 兼容性:Chrome,FF,IE8+ (o ...
- JS完美运动框架【利用了Json】
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 纯手写Myatis框架
1.接口层-和数据库交互的方式 MyBatis和数据库的交互有两种方式: 使用传统的MyBatis提供的API: 使用Mapper接口: 2.使用Mapper接口 MyBatis 将配置文件中的每一个 ...
- 使用纯js写的一个分页
上图晒效果: 网上确实有很多分页的插件以及开源代码,单本是一个后台开发猿,前台css等样式还驾驭不住,所以就开始自己去写了.其实这个分页原理很简单,就是用ajax往后台传值(当前页码),后台使用lim ...
- 纯js写图片轮播插件
最近终于写成了自己创作的图片轮播插件,使用原生js编写.与目前网上流行的轮播插件相比,功能和效果稍弱,但是使用起来相当方便. 先看html代码 <!DOCTYPE html> <ht ...
- 纯JS写最简单的图片轮播
非常简单的一个大图轮播,通过将控制显示位置来进行轮播效果,写来给正在学习的新手朋友们参考交流. 先看效果:(实际效果没有这么快) 先看布局: <div id="display" ...
- 纯JS写出日历
封装代码: (function(cmf){ cmf.showDcalendar=function(){ var fnname=cmf.fn var id="cmfrili2" va ...
- [JS思路]运动框架思路
匀速运动的思路一: 1.先清除动画,再加载动画 2.方向dir有正值和负值,可以通过 目标值 > 当前值 往右移动,即正数 目标值 < 当前值 往右移动,即负数 来进行判断:dir = ...
- 纯JS写动态分页样式效果
效果图如下: html: <body> <div> <table id="btnbox"> <tbody> <tr>&l ...
随机推荐
- mysql shell 备份脚本
使用 mysqldump 备份数据库,通过 FTP 上传到备份服务器,同时在本地保留备份文件. 新建一个 Shell 脚本文件 vi /home/work/backup.sh 添加如下内容: #! / ...
- Journal.Today 1.0.0
我喜欢把一天的日记都放在一个文件中,而不是每次都新建一个文件. 写了一个脚本,检测当天是否已经新建日记,已经新建则打开,未新建则新建并打开. 其中我不太喜欢Wiz日记本来的标题命名方式,所以都 ...
- 从零开始学习jQuery (六) AJAX快餐
一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章讲解如何使用jQuery方便快捷的实现A ...
- Android 所有颜色代码
colors.xml <?xml version="1.0" encoding="utf-8" ?> <resources> <c ...
- CentOS6.4下Git服务器Gitosis安装配置
1.安装GIt: #yum install git 2.增加一个git用户 #useradd git #passwd git 3.创建git仓库存储目录,设置权限 #mkdir /home/git/r ...
- object c小代码——日期篇
1.判断两个日期是否是同一天,不要求小时,分钟要一样 用法 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier: ...
- nyoj 84阶乘后0的个数
描述 计算n!的十进制表示最后有多少个0 输入 第一行输入一个整数N表示测试数据的组数(1<=N<=100)每组测试数据占一行,都只有一个整数M(0<=M<=10000000) ...
- NOIP2001 Car的旅行路线
题四 Car的旅行路线(30分) 问题描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...
- Mac Vim 如何设置高亮
首先进入如下目录 cd /usr/share/vim 然后打开vimrc sudo vim vimrc 在vimrc中的“set backspace=2”这行下插入如下代码: set ai " ...
- Nyoj42 一笔画问题 (欧拉道路)
http://acm.nyist.net/JudgeOnline/problem.php?pid=42题目链接 #include <cstdio> #include <cstring ...