JavaScript——创建运动框架
封装好的运动框架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初学者去看看“智能社“推出的JS教程。
标签:
JavaScript
, 运动框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库