下面这个一个运动框架可以控制元素在一个属性上的运动,同时,可以调用回调函数。

/*
获取元素某个属性的值
@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运动框架的更多相关文章

  1. javascript运动框架(三)

    迟到了好几天,不好意思哈!继续来优化一下javascript运动框架的代码.之前的代码存在bug,当重复点击时速度会加快,那么怎么解决这个bug呢? 现在我们就来解决一下,其实很简单,在开始运动时,关 ...

  2. 好程序员技术教程分享JavaScript运动框架

    好程序员技术教程分享JavaScript运动框架,有需要的朋友可以参考下. JavaScript的运动,即让某元素的某些属性由一个值变到另一个值的过程.如让div的width属性由200px变到400 ...

  3. 【repost】JavaScript运动框架之速度时间版本

    一.JavaScript运动框架之速度版 1.1 运动框架的实现思路 运动,其实就是在一段时间内改变 left . right . width . height . opactiy 的值,到达目的地之 ...

  4. 【原生JS组件】javascript 运动框架

    大家都知道JQuerry有animate方法来给DOM元素进行运动,CSS3中也有transition.transform来进行运动.而使用原生的Javascript来控制元素运动,须要写非常多运动的 ...

  5. JavaScript 运动框架 Step by step(转)

    1,运动原理 Js运动,本质来说,就是让 web 上 DOM 元素动起来.而想要 DOM 动起来,改变其自身的位置属性,比如高宽,左边距,上边距,透明度等.动画的原理就是把不同状态的物体,串成连续的样 ...

  6. javaScript运动框架之匀速运动

    运动框架 1.在开始运动时,关闭已有定时器 2.把运动和停止隔开(if/else) 匀速运动的停止条件 运动终止条件:距离足够近 Demo代码 <!DOCTYPE html> <ht ...

  7. JavaScript 运动框架

    <script> window.onload=function (){ var oDiv=document.getElementById("div1"); oDiv.o ...

  8. javascript运动框架(二)

    紧接着上面写的... 给div加一个边框,border:1px solid black window.onload = function(){      var div = document.getE ...

  9. 适用于CSS2的各种运动的javascript运动框架

    <script> window.onload = function() { //var oDiv1 = document.getElementById('box1'); //var oDi ...

随机推荐

  1. jsp九大内置对象

    application例如用于计算网站访问量时可用到.

  2. [LeetCode] Sort Characters By Frequency 根据字符出现频率排序

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  3. [LeetCode] Increasing Triplet Subsequence 递增的三元子序列

    Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ...

  4. QinQ技术浅析

    作者:  |  上传时间:2009-11-16  |  关键字: QinQ技术(也称Stacked VLAN 或Double VLAN)是指将用户私网VLAN标签封装在公网VLAN标签中,使报文带着两 ...

  5. Ajax入门(一)

    最近开始学习Ajax了0.0,虽然其他的还没巩固,但既然学了就先写下来吧... Ajax的定义呢,百度吧= =...就觉得最实用的地方就是页面无刷新,但网页实现了与后台的同步更新.   1, 首先创建 ...

  6. 【C#】类单例 可以解决全局变量的问题

    单件模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点. 知道 详解

  7. 昆仑游戏[JS加密修改]

    昆仑游戏:http://www.kunlun.com/index.html JS加密修改 BigTools=window.BigTools;//重点 RSAKeyPair=window.RSAKeyP ...

  8. ViewPager实现引导页

    1. 要使用ViewPager,必须要创建 PagerAdapter. 这里创建一个 ViewPagerAdapter来继承PagerAdapter public class ViewPagerAda ...

  9. staxon实现json和xml互转

    pom.xml: <dependency> <groupId>de.odysseus.staxon</groupId> <artifactId>stax ...

  10. C#委托与事件

    一.在控制台下使用委托和事件 我们都知道,C#中有"接口"这个概念,所谓的"接口"就是定义一套标准,然后由实现类来具体实现其中的方法,所以说"接口,是 ...