js多个物体运动功能实例分析
发布时间 - 2026-01-10 21:57:34 点击率:次本文实例分析了js实现的多个物体运动功能。分享给大家供大家参考,具体如下:
与单个的区别:得知道哪个在动,所以运动函数需要两个参数,出了目标iTarget之外,还要obj。另外需要多个计数器,否则当一个还没运动完就移入另一个物体会发生卡壳
window.onload=function(){
var aDiv=document.getElementsByTagName("div");
var timer=null;
var i;
for(i=0;i<aDiv.length;i++){
aDiv[i].timer=null;
aDiv[i].onmouseover=function(){
startMove(this,300);
};
aDiv[i].onmouseout=function(){
startMove(this,100);
};
}
function startMove(obj,iTarget){
clearInterval(obj.timer);
obj.timer=setInterval(function(){
var iSpeed=(iTarget-obj.offsetWidth)/8;
iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed); //凡是要用缓冲运动,肯定缺不了取整,为了让他能到目的点(不然无法完全贴合)
if(obj.offsetWidth==iTarget){
clearInterval(obj.timer);
}
else{
obj.style.width=obj.offsetWidth+iSpeed+'px';
}
},30);
};
};
注:多物体运动,所有东西都不能公用
属性与运动对象绑定:速度、其他属性值(如透明度等)
offsetWidth、offsetHeight、offsetLeft、offsetHeight都有一个bug,拿offsetWidth举例,他除了width还包括padding和border,比如div宽度为100,还有一像素边框,现在让div运动,div.style.width=div.offsetWidth-1+'px',没有边框的的情况下他会一直缩小直到消失,有边框的情况。width:100px,offsetWidth:102px >>>>>width:101px,offsetWidth:103px,会使得他不断变大
解决办法:
用 currentStyle div.style.width=parseInt(getStyle(div,'width'))-1+'px' getStyle是自己封装好的获取样式的函数,里面包括currentStyle方法。parseInt解析字符串返回整数。
扩展(任意值变化):
用同一套运动框架使得一个物体变宽,一个变高,一一个透明度变化
window.onload=function(){
var aDiv=document.getElementsByTagName("div");
var timer=null;
aDiv[0].onmouseover=function(){
startMove(this,'width',300);
};
aDiv[0].onmouseout=function(){
startMove(this,'width',100);
};
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}
else{
return getComputedStyle(obj,false)[attr];
}
};
function startMove(obj,attr,iTarget){
clearInterval(obj.timer);
obj.timer=setInterval(function(){
var iCur=parseInt(getStyle(obj,attr));
var iSpeed=(iTarget-iCur)/8;
iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed); //凡是要用缓冲运动,肯定缺不了取整,为了让他能到目的点(不然无法完全贴合)
if(iCur==iTarget){
clearInterval(obj.timer);
}
else{
obj.style[attr]=iCur+iSpeed+'px';
}
},30);
};
};
这套运动框架还有个问题,透明度没支持
1.
var iCur=parseInt(getStyle(obj,attr));
opacity取到的都是零点几,parseInt取整,所以opacity永远是0,应改为
if(attr=='opacity'){
var iCur=parseFloat(getStyle(obj,attr))*100; //为了其他程序不用修改,这里统一乘100
}
else{
var iCur=parseInt(getStyle(obj,attr));
}
2.
obj.style[attr]=iCur+iSpeed+'px';
按现在写法就是
aDiv.style.opacity=50px;
应改为
if(attr=='opacity'){
obj.style.filter='alpha(opacity:'+(iCur+iSpeed)+')';
obj.style.opacity=(iCur+iSpeed)/100;
}
else{
obj.style[attr]=iCur+iSpeed+'px'
}
3.计算机内部,都是模拟的来存储小数,不是实际来存储,最简单的例子
alert(0.07*100); //输出并不是7,而是7.0000...001,不止7,很多数字(小数)都有问题
所以var iCur=parseFloat(getStyle(obj,attr))*100;就会出问题(会闪烁),解决方法就是避免使用小数
var iCur=parseInt(parseFloat(getStyle(obj,attr))*100);
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript运动效果与技巧汇总》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
# js
# 多个物体
# 运动
# JavaScript实现多个物体同时运动
# JS实现多物体运动的方法详解
# JS运动改变单物体透明度的方法分析
# JS实现物体带缓冲的间歇运动效果示例
# JS多物体实现缓冲运动效果示例
# javascript多物体运动实现方法分析
# Javascript 多物体运动的实现
# JS实现多物体缓冲运动实例代码
# JS多物体 任意值 链式 缓冲运动
# JS实现多物体运动
# 都是
# 都有
# 让他
# 多个
# 要用
# 能到
# 有一
# 就会
# 还没
# 有个
# 相关内容
# 出了
# 遍历
# 感兴趣
# 他会
# 数据结构
# 给大家
# 这套
# 最简单
# 更多关于
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
Thinkphp 中 distinct 的用法解析
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
如何快速搭建二级域名独立网站?
Python面向对象测试方法_mock解析【教程】
php485函数参数是什么意思_php485各参数详细说明【介绍】
Swift中循环语句中的转移语句 break 和 continue
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
Laravel storage目录权限问题_Laravel文件写入权限设置
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
javascript中闭包概念与用法深入理解
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
,网页ppt怎么弄成自己的ppt?
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
JS去除重复并统计数量的实现方法
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Laravel如何使用withoutEvents方法临时禁用模型事件
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
如何撰写建站申请书?关键要点有哪些?
深圳网站制作的公司有哪些,dido官方网站?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
如何在万网自助建站平台快速创建网站?
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
北京网站制作公司哪家好一点,北京租房网站有哪些?
C语言设计一个闪闪的圣诞树
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
C++用Dijkstra(迪杰斯特拉)算法求最短路径
JavaScript数据类型有哪些_如何准确判断一个变量的类型
如何快速搭建自助建站会员专属系统?
如何快速搭建高效香港服务器网站?
QQ浏览器网页版登录入口 个人中心在线进入
如何将凡科建站内容保存为本地文件?
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
php打包exe后无法访问网络共享_共享权限设置方法【教程】
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何有效防御Web建站篡改攻击?
高端云建站费用究竟需要多少预算?
Laravel如何实现数据库事务?(DB Facade示例)
个人网站制作流程图片大全,个人网站如何注销?
详解MySQL数据库的安装与密码配置
JS中对数组元素进行增删改移的方法总结
上一篇: ,南京南站官方网站?
上一篇: ,南京南站官方网站?

