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 cookie操作类的实现代码小结附使用方法
Jun 02 Javascript
来自国外的页面JavaScript文件优化
Dec 08 Javascript
js调用iframe实现打印页面内容的方法
Mar 04 Javascript
jQuery遍历json中多个map的方法
Feb 12 Javascript
浅谈JavaScript超时调用和间歇调用
Aug 30 Javascript
javaScript数组迭代方法详解
Apr 14 Javascript
AngularJS基础 ng-click 指令示例代码
Aug 01 Javascript
jQuery加密密码到cookie的实现代码
Apr 18 jQuery
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
Apr 28 Javascript
bootstrap下拉分页样式 带跳转页码
Dec 29 Javascript
通过cordova将vue项目打包为webapp的方法
Feb 02 Javascript
Vue 无限滚动加载指令实现方法
May 28 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实现jQuery扩展函数
2009/10/30 PHP
PHP使用PDO连接ACCESS数据库
2015/03/05 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
js实现图片轮播效果
2015/12/19 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
jquery事件绑定解绑机制源码解析
2016/09/19 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
Python模块future用法原理详解
2020/01/20 Python
python实现文字版扫雷
2020/04/24 Python
Hotels.com印度:酒店预订
2019/05/11 全球购物
台湾专柜女包:KINAZ
2019/12/26 全球购物
公司中层干部的自我评价分享
2014/03/01 职场文书
高效课堂标语
2014/06/26 职场文书
初中教师个人总结
2015/02/10 职场文书
物业公司管理制度
2015/08/05 职场文书
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL
mysql事务隔离级别详情
2021/10/24 MySQL
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
golang为什么要统一错误处理
2022/04/03 Golang