javascript运动框架
下面这个一个运动框架可以控制元素在一个属性上的运动,同时,可以调用回调函数。
/*
获取元素某个属性的值
@obj: 对象
@attr: 属性值
*/
function getStyle(obj, attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}
else{
return getComputedStyle(obj, false)[attr];
}
} /*
获取元素某个属性的值
@obj: 对象
@attr: 属性值
@iTarget: 目标值(int)
@fn: 回调函数
*/
function startMove(obj, attr, iTarget, fn){
clearInterval(obj.timer);
obj.timer = setInterval(function(){ if(attr =="opacity"){
var iCur = parseInt(parseFloat(getStyle(obj, attr))*100);
}else{
var iCur = parseInt(getStyle(obj, attr));
} var iSpeed = (iTarget-iCur)/8;
iSpeed = iSpeed>0? Math.ceil(iSpeed): Math.floor(iSpeed); if(iCur == iTarget){
clearInterval(obj.timer); if(fn){
fn();
}
}
else{
if(attr == "opacity"){
obj.style.filter = 'alpha(opacity:' + (iCur + iSpeed)+ ')';
obj.style.opacity = (iCur + iSpeed)/100;
}else{
obj.style[attr] = iCur + iSpeed + 'px';
} }
}, 30);
}
上面这个运动框架存在不足:它只能给一个属性设置动画,下面这个运动框架通过json来实现给多个属性同时设置动画:
/*
获取元素某个属性的值
@obj: 对象
@attr: 属性值
*/
function getStyle(obj, attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}
else{
return getComputedStyle(obj, false)[attr];
}
} /*
获取元素某个属性的值
@obj: 对象
@json: {属性值1:目标值1,属性值2:目标值2,...}
@fn: 回调函数
*/
function startMove(obj, json, fn){
clearInterval(obj.timer);
obj.timer = setInterval(function(){
var bStop = true; //运动结束标致
for(var attr in json){ //1.取当前值
iCur = 0;
if(attr =="opacity"){
var iCur = parseInt(parseFloat(getStyle(obj, attr))*100);
}else{
var iCur = parseInt(getStyle(obj, attr));
} //2.算速度
var iSpeed = (json[attr]-iCur)/8;
iSpeed = iSpeed>0? Math.ceil(iSpeed): Math.floor(iSpeed); //3.检查停止
if(iCur != json[attr]){
bStop = false;
} if(attr == "opacity"){
obj.style.filter = 'alpha(opacity:' + (iCur + iSpeed)+ ')';
obj.style.opacity = (iCur + iSpeed)/100;
}else{
obj.style[attr] = iCur + iSpeed + 'px';
}
}
if(bStop){
clearInterval(obj.timer);
if (fn) {
fn();
};
} }, 30);
}
弹性运动:
var iSpeed = 0;
var left = 0; function startMove(obj, iTarget){ clearInterval(obj.timer) obj.timer = setInterval(function(){
iSpeed+=(iTarget - obj.offsetLeft)/5;
iSpeed*=0.7; left +=iSpeed; if(Math.abs(iSpeed)<1 && Math.abs(left - iTarget)<1){
clearInterval(obj.timer);
obj.style.left = iTarget + 'px';
}else{
obj.style.left = left + 'px';
} }, 30);
}
弹性运动运用的范围有限,一般用于菜单的选择特效:带有滑块的导航条
javascript运动框架的更多相关文章
- javascript运动框架(三)
迟到了好几天,不好意思哈!继续来优化一下javascript运动框架的代码.之前的代码存在bug,当重复点击时速度会加快,那么怎么解决这个bug呢? 现在我们就来解决一下,其实很简单,在开始运动时,关 ...
- 好程序员技术教程分享JavaScript运动框架
好程序员技术教程分享JavaScript运动框架,有需要的朋友可以参考下. JavaScript的运动,即让某元素的某些属性由一个值变到另一个值的过程.如让div的width属性由200px变到400 ...
- 【repost】JavaScript运动框架之速度时间版本
一.JavaScript运动框架之速度版 1.1 运动框架的实现思路 运动,其实就是在一段时间内改变 left . right . width . height . opactiy 的值,到达目的地之 ...
- 【原生JS组件】javascript 运动框架
大家都知道JQuerry有animate方法来给DOM元素进行运动,CSS3中也有transition.transform来进行运动.而使用原生的Javascript来控制元素运动,须要写非常多运动的 ...
- JavaScript 运动框架 Step by step(转)
1,运动原理 Js运动,本质来说,就是让 web 上 DOM 元素动起来.而想要 DOM 动起来,改变其自身的位置属性,比如高宽,左边距,上边距,透明度等.动画的原理就是把不同状态的物体,串成连续的样 ...
- javaScript运动框架之匀速运动
运动框架 1.在开始运动时,关闭已有定时器 2.把运动和停止隔开(if/else) 匀速运动的停止条件 运动终止条件:距离足够近 Demo代码 <!DOCTYPE html> <ht ...
- JavaScript 运动框架
<script> window.onload=function (){ var oDiv=document.getElementById("div1"); oDiv.o ...
- javascript运动框架(二)
紧接着上面写的... 给div加一个边框,border:1px solid black window.onload = function(){ var div = document.getE ...
- 适用于CSS2的各种运动的javascript运动框架
<script> window.onload = function() { //var oDiv1 = document.getElementById('box1'); //var oDi ...
随机推荐
- WordPress + Nginx +PHP+MySQL
Windows下配置Nginx+php环境 1)php的安装与配置. 直接解压下载好的php包,到D盘wnmp目录(D:\wnmp),这里把解压出来的文件夹重命名成php5.进入文件夹修改php.in ...
- 《Note --- Unreal 4 --- PersonaHowToMovement》
https://docs.unrealengine.com/latest/CHN/Gameplay/HowTo/CharacterMovement/index.html 这里的demo是按照一些per ...
- [游戏开发-学习笔记]菜鸟慢慢飞(四)-Camera
游戏开发中,主相机应该是最重要的GameObject之一,毕竟游戏呈现给玩家,就是通过它. 相机的使用,在不同的游戏中,有很大的不同.这里总结一下自己学到的一些相关知识. 固定位置-游戏过程中相机的T ...
- Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序
先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() ...
- 揭开C++类中虚表的“神秘面纱”
C++类中的虚表结构是C++对象模型中一个重要的知识点,这里咱们就来深入分析下虚表的在内存中的结构. C++一个类中有虚函数的话就会有一个虚表指针,其指向对应的虚表,一般一个类只会有一个虚表,每个虚表 ...
- ESLint规则配置说明
"no-alert": 0,//禁止使用alert confirm prompt "no-array-constructor": 2,//禁止使用数组构造器 & ...
- jQuery Ajax传值给Servlet,在Servlet里Get接受参数乱码的解决方法
最近在学jquery ui,在做一个小功能的时候需要将前台的值获取到,通过Ajax传递给Servlet,然后再在返回数据结果,但是在Servlet接受参数的时候,通过后台打印,发现接受乱码,代码示例如 ...
- docker 学习过程
参考: http://git.oschina.net/search?search=csphere&type=project&language=&page=2&condi ...
- jquery中attr和prop的区别
在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很多.这里谈谈我的心得,我的心得很简单: ...
- 测试对于list的sort与sorted的效率
sorted from time import clock from random import randint start = clock() a = [randint(0,1000000) for ...