JavaScript 创建运动框架的实现代码


Posted in Javascript onMay 08, 2013

封装好的运动框架Move(obj,attr,iTarget),可直接调用:

可用于设置width、border、fontSize、marginLeft、opacity等许多常见属性值的变速变化,实现各种有趣效果。

兼容IE和FF。

/****************
    *
    *   IE-BUG:
    *   在IE中,设置opacity属性时,元素样式中需要设置opacity属性,才能读取到opacity值。
    *
    *   obj:元素对象。   attr:用引号包围的属性名。   iTarget:属性目标值。
    *
    *****************/

    function Move(obj,attr,iTarget){
        clearInterval(obj.timer);//关闭前一个定时器,解决对同个对象同时调用多个Move()时,定时器叠加问题。使用obj.timer给每个调用Move()的对象赋予各自的定时器,防止多个对象同时调用Move()时,同用一个定时器,而导致相关干扰问题。
        obj.timer=setInterval(function(){
            var cur=0;//创建一个变量,用于存储 attr属性每时每刻的值
            if(attr=="opacity"){
            //针对在FF中opacity属性值为浮点数值问题,将属性值 四舍五入、转换成浮点型。乘以100,使opacity属性值与IE统一为百分数
                cur=Math.round(parseFloat(getStyle(obj,attr))*100);
            }else{
                cur=parseInt(getStyle(obj,attr));//将除opacity外的属性(width/fontSize/MarginLeft等)的初始值 转换为整型
            }
            var speed=(iTarget-cur)/10;//创建 递减的速度speed变量。实现属性值的变速改变
            speed=speed>0?Math.ceil(speed):Math.floor(speed);//取整,解决浏览器忽略小于1px的数值 导致运动结束时,离目标值Itarget少几个像素的问题
            if(iTarget==cur){//当目标值等于目标值时,结束定时器
                clearInterval(obj.timer);
            }else{
                    cur+=speed;//当前值cur 加上 递减的速度值speed
                if(attr=="opacity"){
                    // 分别对IE和FF设置opacity属性值
                    obj.style.filter="alpha(opacity:"+cur+")"; //for IE
                    obj.style.opacity=cur/100;   //for FF
                }else{
                    obj.style[attr]=cur+"px"; //给指定属性attr 添加值cur+speed
                }
            }
        },30);
    }
    //getStyle()函数 用于兼容IE和FF:获取 对象的 非行间样式中的属性的值。 obj:元素对象。 name:属性名。
    function getStyle(obj,name){
        if(obj.currentStyle){
            return obj.currentStyle[name];//for IE
        }else{
            return getComputedStyle(obj,false)[name];//for FF
        }
    }
Javascript 相关文章推荐
textarea中的手动换行处理的jquery代码
Feb 26 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
Sep 18 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
Jan 25 Javascript
高效的jquery数字滚动特效
Dec 17 Javascript
干货分享:让你分分钟学会javascript闭包
Dec 25 Javascript
JS获取复选框的值,并传递到后台的实现方法
May 30 Javascript
js学习心得_一个简单的动画库封装tween.js
Jul 14 Javascript
关于ES6箭头函数中的this问题
Feb 27 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
Jul 13 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
Sep 26 Javascript
JS控制只能输入数字并且最多允许小数点两位
Nov 24 Javascript
基于Vue中的父子传值问题解决
Jul 27 Javascript
jQuery输入城市查看地图使用介绍
May 08 #Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
May 08 #Javascript
基于jquery实现拆分姓名的方法(纯JS版)
May 08 #Javascript
jQuery cdn使用介绍
May 08 #Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
May 08 #Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
May 08 #Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
May 08 #Javascript
You might like
php xml常用函数的集合(比较详细)
2013/06/06 PHP
php创建session的方法实例详解
2015/01/27 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
详解python调用cmd命令三种方法
2019/07/08 Python
django数据库自动重连的方法实例
2019/07/21 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
python中append函数用法讲解
2020/12/11 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
维也纳通行证:Vienna PASS
2019/07/18 全球购物
旅游专业职业生涯规划范文
2014/01/13 职场文书
单位委托书怎么写
2014/08/02 职场文书
重阳节活动总结
2014/08/27 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
处罚决定书范文
2015/06/24 职场文书