变速运动实例(二)[通俗易懂]

变速运动实例(二)[通俗易懂]变速运动实例(二)(1)右下角区块初始位置处于右下角。当页面滚动时,区块位置会随之滑动,并且最终停止在右下角位置。(2)滑块处于浏览器右边视角中部,当页面滚动时,最终停止滚动时滑块也会滚动到中部。<!doctypehtml><html><head><title>运动</title><…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

变速运动实例(二)
(1)右下角区块初始位置处于右下角。当页面滚动时,区块位置会随之滑动,并且最终停止在右下角位置。
变速运动实例(二)[通俗易懂]

(2)滑块处于浏览器右边视角中部,当页面滚动时,最终停止滚动时滑块也会滚动到中部。
变速运动实例(二)[通俗易懂]
<!doctype html>
<html>
<head>
<title>运动</title>
<meta charset="utf-8">
<style>
html{
     
     font-family:楷体;}
#div1{
     
     width:100px;height:150px;background:red;position:absolute;right:0;bottom:0;}

</style>
<script>
window.onscroll=function()
{
    var oDiv=document.getElementById('div1');
    var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
    startMove(document.documentElement.clientHeight-oDiv.offsetHeight+scrollTop);
}
var timer=null;
function startMove(iTarget)
{
    var oDiv=document.getElementById('div1');
    clearInterval(timer);
    timer=setInterval(function(){
        var speed=(iTarget-oDiv.offsetTop)/4;
        speed=speed>0?Math.ceil(speed):Math.floor(speed);
        if(oDiv.offsetTop==iTarget)
        {
            clearInterval(timer);
        }
        else
        {
            oDiv.style.top=oDiv.offsetTop+speed+'px';
        }
    },30)
}
</script>
</head>
<body style='height:2000px;'>
<div id='div1'></div>
</body>
</html>

Jetbrains全家桶1年46,售后保障稳定

问题

(1)为什么当window.onscroll包含var timer=null;function startMove(iTarget){……};的内容时,滑块会出现“疯狂”抖动现象。
(2)为什么var timer=null;写在函数 startMove(iTarget)内部时,滑块会出现“疯狂”抖动现象?

speed导致距离无法除尽,导致接近目标点滑块不断跳动的问题。

<!doctype html>
<html>
<head>
<title>运动</title>
<meta charset="utf-8">
<style>
html{
     
     font-family:楷体;}
#div1{
     
     width:100px;height:100px;background:red;left:600px;top:50px;position:absolute;}
#div2{
     
     width:1px;height:300px;background:black;left:300px;top:0px;position:absolute;}
#div3{
     
     width:1px;height:300px;background:black;left:100px;top:0px;position:absolute;}
</style>
<script>

var timer=null;
function startMove(iTarget)
{
    var oDiv=document.getElementById('div1');
    clearInterval(timer);
    timer=setInterval(function(){
    
        var speed=0;
        if(oDiv.offsetLeft<iTarget)
        {
            speed=7;
        }
        else
        {
            speed=-7;
        }
        if(oDiv.offsetLeft==iTarget)
        {
            clearInterval(timer);
        }
        else
        {
            oDiv.style.left=oDiv.offsetLeft+speed+'px';    
        }
    },30);
}



</script>
</head>
<body style='height:2000px;'>
<input type='button' value='到100' onclick='startMove(100)'/>
<input type='button' value='到300' onclick='startMove(300)'/>
<div id='div1'></div>
<div id='div2'></div>
<div id='div3'></div>
</body>
</html>

document.documentElement.clientHeight-oDiv.offsetHeight)/2的值可能产生小数,会造成iTarget的值为小数,而oDiv.offsetTop的值只会出现整数,造成oDiv.offsetTop==iTarget不可能成立,oDiv.offsetTop的值只会大于iTarget或小于iTarget,导致抖动出现。需要parseInt()函数来取整。
原代码中:
if(oDiv.offsetLeft==iTarget)
{
clearInterval(timer);
}
需要优化判断机制,当接近目标点时,就认为已经到达,停止定时器并设置其left值为目标点。
if(Math.abs(iTarget-oDiv.offsetLeft)<=7)
{
clearInterval(timer);
oDiv.style.left=iTarget+’px’;
}

 

 

转载于:https://www.cnblogs.com/f6056/p/9394372.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213617.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数论的概念_数论难吗

    数论的概念_数论难吗转载自:https://blog.csdn.net/whereisherofrom/article/details/78922798素数:http://www.cnblogs.com/fzl194/

    2022年8月2日
    13
  • django验证码登录_实名认证验证库中无此信息

    django验证码登录_实名认证验证库中无此信息djoser是什么?作用:Django认证系统的REST实现。djoser库提供了一组DjangoRestFramework视图,用于处理注册、登录、注销、密码重置和帐户激活等基本操作。它适用于

    2022年7月31日
    5
  • 静态代理理解_如何做代理

    静态代理理解_如何做代理静态代理现在如果要对每个..

    2022年10月16日
    5
  • rhel6 裸设备绑定

    rhel6 裸设备绑定

    2021年8月31日
    62
  • 算法的时间与空间复杂度(一看就懂)

    算法的时间与空间复杂度(一看就懂)算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的「时间」和「空间」两个维度去考量。 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。 空间维度:是指执行当前算…

    2022年5月14日
    31
  • android软件开发工具(WiFi破解)

    做为一个多年奋战在Android应用开发一线的程序员来说,程序调试的苦是不言而喻的,在过去的很长一段时间里,我们如果要调试Android应用只能通过USB数据线,一头连着手机,一头联着电脑,不敢让手机离开电脑半步。、         曾经有一段时间,我总是担心天天这样高强度的调试别把手机的USB口给磨坏了。也许有朋友问了,那怎么不用模拟器呢?事实上,不是不想用,而是电脑上开个模似器可能需

    2022年4月13日
    61

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号