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 相关文章推荐
基于Web标准的UI组件 — 树状菜单(2)
Sep 18 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
Nov 16 Javascript
JS文本框不能输入空格验证方法
Mar 19 Javascript
Javascript实现的简单右键菜单类
Sep 23 Javascript
vue.js入门教程之绑定class和style样式
Sep 02 Javascript
解决Angular.Js与Django标签冲突的方案
Dec 20 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
Jun 15 Javascript
vue iView 上传组件之手动上传功能
Mar 16 Javascript
vue 登录滑动验证实现代码
Aug 24 Javascript
js防抖和节流的深入讲解
Dec 06 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
Jan 23 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
Aug 14 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中curl_multi的应用
2013/07/17 PHP
php开启openssl的方法
2014/05/15 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
JavaScript表单常用验证集合
2008/01/16 Javascript
JavaScript 字符串连接性能优化
2008/12/20 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
js运动应用实例解析
2015/12/28 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
使用socket.io实现简单聊天室案例
2018/01/02 Javascript
详解Node.js模板引擎Jade入门
2018/01/19 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
python之DataFrame实现excel合并单元格
2021/02/22 Python
django session完成状态保持的方法
2018/11/27 Python
Python编程快速上手——正则表达式查找功能案例分析
2020/02/28 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
生产车间主管岗位职责
2013/12/28 职场文书
《口技》教学反思
2014/02/21 职场文书
高等教育学专业自荐书
2014/06/17 职场文书
小学捐书活动总结
2014/07/05 职场文书
美术兴趣小组活动总结
2014/07/07 职场文书
党校党性分析材料
2014/12/19 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
具结保证书范本
2015/05/11 职场文书
Python访问Redis的详细操作
2021/06/26 Python