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代码
Jun 27 Javascript
input的focus方法使用
Mar 13 Javascript
AngularJS Module方法详解
Dec 08 Javascript
javascript获取wx.config内部字段解决微信分享
Mar 09 Javascript
jquery仿QQ登录账号选择下拉框效果
Mar 22 Javascript
Javascript 获取鼠标当前的位置实现方法
Oct 27 Javascript
vue中用动态组件实现选项卡切换效果
Mar 25 Javascript
vue keep-alive请求数据的方法示例
May 16 Javascript
详解关于vue-area-linkage走过的坑
Jun 27 Javascript
vue 中url 链接左边的小图标更改问题
Dec 30 Javascript
JavaScript实现页面动态验证码的实现示例
Mar 23 Javascript
详解JavaScript中Arguments对象用途
Aug 30 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
用PHP实现文件上传二法
2006/10/09 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
Python操作Mongodb数据库的方法小结
2019/09/10 Python
python同时替换多个字符串方法示例
2019/09/17 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
关于python中的xpath解析定位
2020/03/06 Python
Python self用法详解
2020/11/28 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
全球地下的服装和态度:Slam Jam
2018/02/04 全球购物
试用期员工考核制度
2014/01/22 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技