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

变速运动实例(二)[通俗易懂]变速运动实例(二)(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)
上一篇 2025年7月17日 下午5:22
下一篇 2025年7月17日 下午6:01


相关推荐

  • 万能量产工具_u盘量产工具怎样使用

    万能量产工具_u盘量产工具怎样使用MPALLv3.23.00版本量产工具可以用来给16G金士顿U盘(PS2251-50)主控刷固件量产。当然也适合其他ps22XX主控的量产只是不用刷固件,一般是量产坏了或者量产不了才涉及到刷固件。做设置分区数量,制作u盘启动盘、低级格式化等不需要刷固件即可成功量产。包含固件为50的固件:BN50V313M-8K.BIN BN50V3122KM-2@4k.BIN FW50FF01

    2025年10月12日
    5
  • OpenClaw For Creation——在飞书上养一只“大龙虾”秘籍

    OpenClaw For Creation——在飞书上养一只“大龙虾”秘籍

    2026年3月13日
    3
  • ECharts案例大全(最新版),含各种案例,实例。

    ECharts案例大全(最新版),含各种案例,实例。前言 2022 年 2 月以前 ECharts 官网除了提供官方案例外 还额外提供了一个 ECharts 案例资源丰富的强大社区 MakeAPie 来展示各类的 ECharts 案例 这对于广大开发者 特别是前端页面仔们来说简直是个福音网站 然后 现在却因无人维护 该社区被停用了 这一停用无疑给广大 ECharts 使用者们带来一阵阴影 ps 要是遇上复杂的 ECharts 图标需求 那不得每次都是重头画起 呜呜 方法一 不过不要慌张 本着遇到问题就解决问题的干劲 社区动力大佬为大家重新整理了一份几乎和原 MakeA

    2026年3月26日
    3
  • 在树莓派上安装 PyCharm

    在树莓派上安装 PyCharm创建快捷方式为了方便起见 可以添加快捷方式到启动器和桌面 在启动器中添加图标 编辑文件 然后你就会看到树莓派菜单中的 PyCharm 图标

    2026年3月19日
    3
  • ActionChains用法

    ActionChains用法Step1 导入 ActionChains webdriver common action chainsimport 定义鼠标悬停的元素 move driver find element by css selector div queryschema control ivu col ivu c

    2026年3月20日
    2
  • pandas中关于DataFrame行,列显示不完全(省略)的解决办法[通俗易懂]

    pandas中关于DataFrame行,列显示不完全(省略)的解决办法[通俗易懂]有时候DataFrame中的行列数量太多,print打印出来会显示不完全。就像下图这样:列显示不全:行显示不全:添加如下代码,即可解决。#显示所有列pd.set_option(‘display.max_columns’,None)#显示所有行pd.set_option(‘display.max_rows’,None)#设置value的显示长度为100,默…

    2022年7月15日
    19

发表回复

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

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