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入门教程(11) js事件处理
Jan 31 Javascript
详解AngularJS中的依赖注入机制
Jun 17 Javascript
Augularjs-起步详解
Jul 08 Javascript
AngularJS 单元测试(二)详解
Sep 21 Javascript
Angular2从搭建环境到开发步骤详解
Oct 17 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
Jan 04 Javascript
10个最优秀的Node.js MVC框架
Aug 24 Javascript
jQuery实现获取及设置CSS样式操作详解
Sep 05 jQuery
JS实现数组去重,显示重复元素及个数的方法示例
Jan 21 Javascript
Vue使用mixin分发组件的可复用功能
Sep 01 Javascript
Python版实现微信公众号扫码登陆
May 28 Javascript
el-form 多层级表单的实现示例
Sep 10 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项目开发中用到的快速排序算法分析
2016/06/25 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
javascript arguments使用示例
2014/12/16 Javascript
JSON字符串转JSON对象
2015/07/31 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
python实现获取序列中最小的几个元素
2014/09/25 Python
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
python list排序的两种方法及实例讲解
2017/03/20 Python
Python中input与raw_input 之间的比较
2017/08/20 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
银行求职信个人范文
2013/12/16 职场文书
德育标兵事迹材料
2014/08/24 职场文书
2014年检验科工作总结
2014/11/22 职场文书
教师个人教学总结
2015/02/11 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android