javascript - 关于js缓冲运动函数
伊谢尔伦
伊谢尔伦 2017-04-10 17:30:51
[JavaScript讨论组]

function startMove(iTarget){

var op = document.getElementById('p1');  
clearInterval(timer);  

timer = setInterval(function(){  
    var iSpeed = (iTarget - op.offsetLeft) / 8;  
    iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);  

    //    这是网上的运动函数,此处的停止运动判断,在有些情况下根本不会成立啊,因为速度值很可能直接跳过了目标值
    //    然后一直执行下去啊
    if(op.offsetLeft == iTarget){  
        clearInterval(timer);  
    }else{  
        op.style.left = op.offsetLeft + iSpeed + 'px';  
    }  

},230);  

}

请问怎么解决?
如果直接将条件改写为 op.offsetLeft >= iTarget ,可是这样的话,如果目标值是反向,也就是负值,不就完蛋了?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
黄舟

根据楼主的提示:

补充如下:我是这样理解的,

首先说明,缓冲函数的基本原理就是起始点和目标点距离越远的话速度越快,反之...
下面请看: 主要就是这两句话

var iSpeed = (iTarget - op.offsetLeft) / 8;  
iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);  

原理主要是这两句话:第一句是 取得每次作用的值,由公式可以看出iSpeed每次的值由于除以一个大于1的数字,所以就保证了每次运动后的点不会超过目标点;
在临近目标点的时候,iSpeed会小于1,由第二句话取整为1,这时候op就是以1px为单位运动到目标点,与目标点就会完美的切合(因为,js中不会识别小数点以后的单位);
至于第二句判断iSpeed正负的三目则是为了适应运动的形式为:起始点大于目标点的情形;

嗯,就是这样,
楼主你提到的目标点的是设置iSpeed的值必须为 到目标点的距离的整除才可以,那个问题可以通过iSpeed 先判断 最后赋值来解决,和这个问题还是有些差别

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号