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工具_Form 封装
Aug 21 Javascript
JavaScript中的onerror事件概述及使用
Apr 01 Javascript
深入理解javascript中defer的作用
Dec 11 Javascript
使用JSLint提高JS代码质量方法分享
Dec 16 Javascript
JS+JSP checkBox 全选具体实现
Jan 02 Javascript
jquery获取tagName再进行判断
May 29 Javascript
JavaScript中split() 使用方法汇总
Apr 17 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
Dec 01 Javascript
fullCalendar中文API官方文档
Feb 07 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
Jul 20 Javascript
Vue中如何实现轮播图的示例代码
Jul 27 Javascript
vue-cli3 引入 font-awesome的操作
Aug 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
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
PHP+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
Sublime里直接运行PHP配置方法
2014/11/28 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
jquery简单体验
2007/01/10 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
2017/03/30 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
简单了解python反射机制的一些知识
2019/07/13 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
个人职业生涯规划书1500字
2013/12/31 职场文书
爱心捐助倡议书
2014/05/19 职场文书
啤酒节策划方案
2014/05/28 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
2015年大学教师工作总结
2015/05/20 职场文书