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 相关文章推荐
javascript 日期常用的方法
Nov 11 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
Jan 07 Javascript
一步一步制作jquery插件Tabs实现过程
Jul 06 Javascript
用JavaScript实现页面重定向功能的教程
Jun 04 Javascript
Vue.js第四天学习笔记(组件)
Dec 02 Javascript
bootstrap vue.js实现tab效果
Feb 07 Javascript
js实现彩色条纹滚动条效果
Mar 15 Javascript
React Native中的RefreshContorl下拉刷新使用
Oct 09 Javascript
Vue实现页面添加水印功能
Nov 09 Javascript
JavaScript利用键盘码控制div移动
Mar 19 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
Apr 28 Javascript
手机浏览器唤起微信分享(JS)
Oct 11 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基础知识:函数基础知识
2006/12/13 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
QUnit jQuery的TDD框架
2010/11/04 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
JavaScript中三种异步上传文件方式
2016/03/06 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
5 种JavaScript编码规范
2018/01/30 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
原生JS实现弹幕效果的简单操作指南
2020/11/10 Javascript
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
python数组复制拷贝的实现方法
2015/06/09 Python
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
Pycharm以root权限运行脚本的方法
2019/01/19 Python
wxPython实现带颜色的进度条
2019/11/19 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
JMS中Topic和Queue有什么区别
2013/05/15 面试题
Java平台和其他软件平台有什么不同
2015/06/05 面试题
DTD的含义以及作用
2014/01/26 面试题
信息专业本科生个人的自我评价
2013/10/28 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
工作表现自我评价
2014/02/08 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
志愿者宣传口号
2014/06/17 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
上课说话检讨书500字
2014/11/01 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
外国人来华邀请函
2015/01/31 职场文书
2015年酒店工作总结
2015/04/28 职场文书
教师见习总结范文
2015/06/23 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
vue实现在data里引入相对路径
2022/06/05 Vue.js