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 相关文章推荐
优秀js开源框架-jQuery使用手册(1)
Mar 10 Javascript
js多级树形弹出一个小窗口层(非常好用)实例代码
Mar 19 Javascript
js遍历子节点子元素附属性及方法
Aug 19 Javascript
原生JS实现左右箭头选择日期实例代码
Mar 14 Javascript
JS表格组件神器bootstrap table使用指南详解
Apr 12 Javascript
手写简单的jQuery雪花飘落效果实例
Apr 22 jQuery
20个最常见的jQuery面试问题及答案
May 23 jQuery
vue.js实现只能输入数字的输入框
Oct 19 Javascript
JavaScript的console命令使用实例
Dec 03 Javascript
原生js+canvas实现贪吃蛇效果
Aug 02 Javascript
微信小程序实现页面监听自定义组件的触发事件
Nov 01 Javascript
如何制作自己的原生JavaScript路由
May 05 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中使用redis队列操作实例代码
2013/02/07 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
js获取url传值的方法
2015/12/18 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
js中数组对象去重的两种方法
2019/01/18 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
python定义类self用法实例解析
2020/01/22 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
运动会闭幕式解说词
2014/02/21 职场文书
年终晚会活动方案
2014/08/21 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
个人贷款收入证明
2014/10/26 职场文书
搞笑老公保证书
2015/02/26 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python