问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

js高手来帮我解释一下这段代码的意思

发布网友 发布时间:2022-04-21 21:46

我来回答

4个回答

热心网友 时间:2022-05-18 14:42

lastScrollY=-0; // 定义变量最后一个 滚动的Y
function backtop() {  // 定义定时器的回调函数backtop
  diffY=document.body.scrollTop;  // body 的scrollTop也就是当前滚动的长度为diffY
  percent=.1*(diffY-lastScrollY); // 定义变量percent 为 diffY - lastScrollY 乘0.1
  // 上面的意思为 body 的滚动高度 减去定义的高度 的十分之一 赋值给 percent变量
  if(percent>0) {
    percent=Math.ceil(percent);
  } else {
    percent=Math.floor(percent);
  }
  // 如果计算出来的值是大于0的 就上取整 否则就下取整 (如果不懂可以百度下这两个函数)
  //document.all.toolTipLayer2.style.pixelTop+=percent;
  // 然后给toolTipLayer2这个元素的 pixelTop属性。加上percent (因为定时器是每1毫秒执行
  //一次所以说是不停的加上percent)
  
  lastScrollY=lastScrollY+percent;
  // lastScrollY 的值变为 lastScrollY和percent之和。 
  // 其实这段代码的含义就是  让一个元素不停的滚动, 因为lastScrollY每次都会成为之前
  // 的lastScrollY和percent之和。 所以diffY 减去 lastScrollY 乘以0.1 的值就会越来越小
  // 直到他们的值 小于0 后 被下取整后成为0 就不再滚动了。 也就是一个从快到慢的滚动过程 
}
window.setInterval("backtop()",1);

热心网友 时间:2022-05-18 16:00

<script language=javascript> 
lastScrollY=-0; 
function backtop() 

    //拿到当前滚动位置(吐槽一下,这个变量名起的实在是不太合意)
    diffY=document.body.scrollTop; 
    //计算比上次滚动移动了多少,并乘以0.1
    percent=.1*(diffY-lastScrollY); 
    //页面坐标系的顶部y=0,越往下y越大。
    //所以移动距离大于零就说明是往下滚动
    if(percent>0) 
    { 
        //比如说这次向下滚动了123px,那percent就是12.3,
        //ceil是向上取整(比它大的第一个整数),就变成了13
        percent=Math.ceil(percent); 
    } 
    else 
    { 
        //比如说这次向上滚动了321px,那percent就是-32.1
        //floor是向下取整(比它小的第一个整数),变成了-33
        percent=Math.floor(percent); 
    } 
    //让all里面的toolTipLayer2的top加上刚才的percent
    //换句话说让toolTipLayer2跟着滚动的方向移动,移动的距离比滚动的距离小的多
    document.all.toolTipLayer2.style.pixelTop+=percent; 
    //这里更新了lastScrollY,我们在下面做详细的分析
    lastScrollY=lastScrollY+percent; 

// 每隔1毫秒执行一次backtop()
window.setInterval("backtop()",1); 
</script>

首先,整段代码应该是从window.setInterval("backtop()",1)开始的,设置了一个定时器,每1毫秒执行一次backtop()。

其次,搞懂几个关键变量的含义:

diffY=document.body.scrollTop 这个diffY就是滚动位置。每次页面滚动,它就会改变(所谓滚动位置,其实就是页面的垂直方向的第几个像素处在浏览器顶部)

lastScrollY这个东东,它的含义并不是上次的滚动位置。我也不知道用什么词来描述它比较好,就直接说它的作用吧:一旦它跟diffY不一样,它就会逐渐向diffY靠近,每次靠近的距离percent等于它俩的差值乘以0.1。

比如一开始lastScrollY是0,滚动位置diffY是100;它就会先增加(100-0)x0.1=10,变成10,然后增加(100-10)x0.1=9,变成19,然后增加(100-19)x0.1=8.1(向上取整得到9),变成28,然后增加(100-28)x0.1=7.2(向上取整得到8)。。。。一直到它等于滚动位置diffY。我们可以看到每次它移动的步长逐渐变短。

想象一下如果有一个东西一开始就在页面顶部,滚动页面的时候,它的位置按照lastScrollY来改变,那么它的移动方式就是开始的时候很快地向滚动位置移动,然后逐渐变慢,最后到达滚动位置。

那么如果有一个东西一开始在距离页面顶部Y0处,每次我们让它的Y0也按照3里的东西同样的速度移动,是不是就可以让它以同样的方式移动到滚动位置+Y0的位置上呢?答案是是的!

document.all.toolTipLayer2.style.pixelTop这个是toolTipLayer2处在页面上的位置Y0了。

欢迎追问

热心网友 时间:2022-05-18 17:35

这个是js的对联广告
diffY=document.body.scrollTop; //获取网页被卷去的高

percent=.1*(diffY-lastScrollY); //获取滚动的百分比

if(percent>0)
{
percent=Math.ceil(percent); //百分比向上类型转换 eq:0.6和0.4就会转换为1
}
else
{
percent=Math.floor(percent); //百分比向下类型转换 eq:0.6和0.4就会转换为0
}
document.all.toolTipLayer2.style.pixelTop+=percent; //获取页面中的toolTipLayer2的元素然后设置最近一个定位的父对象顶部的位置
lastScrollY=lastScrollY+percent; //这一句就不用解释了吧

window.setInterval("backtop()",1); //没隔一秒调用一次定时器(调用你那个定义的方法)

记得给分额。。。追问回答的不错,有过还有一个小问题,如果我想做到在网页拖用条放在最顶上的时候自定div的absolute中的top定位如果改这段代码,
目的:在不往下拉时toolTipLayer2的div在网页中的位置可以自行控制,在拉动网页的时候还是保存top为0,请问可以做到吗?

热心网友 时间:2022-05-18 19:26

<script language=javascript>
lastScrollY=-0; /**定义一个全局变量lastScrollY*/
function backtop() /**一个名字叫backtop的方法*/
{
diffY=document.body.scrollTop; /**定义一个全局变量diffY,并赋值;document.body.scrollTop这个没有前文我不知道是什么*/
percent=.1*(diffY-lastScrollY); /**定义一个全局变量percent,计算这个你看的懂的吧“*1”是把他的值变成number类型的*/
if(percent>0) /**判断*/
{
percent=Math.ceil(percent); /**执行Math.ceil,并赋值给percent*/
}
else
{
percent=Math.floor(percent); /**执行Math.floor,并赋值给percent*/
}
document.all.toolTipLayer2.style.pixelTop+=percent; /**给document.all.toolTipLayer2.style.pixelTop赋值;例子:a+=b-->a=a+b;document.all.toolTipLayer2.style.pixelTop这个没有前文我不知道是什么*/
lastScrollY=lastScrollY+percent; /**简单的加法运算*/
}
window.setInterval("backtop()",1); /**这是一个javescript网页页脚函数,该函数的意义是让浏览器定时执行一些设定好的函数代码,如:window.setInterval('abc()',3000);即浏览器第隔3称秒都会执行一次abc函数*/
</script>
/**
Math.ceil()是常见编程语言中的常用代码,ceil() 方法执行的是向上取整计算,它返回的是大于或等于函数参数,并且与之最接近的整数
Math.ceil(12.2)//返回13
Math.ceil(12.7)//返回13
Math.ceil(12.0)// 返回12

Math.floor
floor -- 原意 地板。
数学函数,求一个浮点数的地板,就是求一个最接近它的整数,它的值小于或等于这个浮点数。
例如:
Math.floor(0.60) -- 0
Math.floor(0.40) -- 0
Math.floor(5) -- 5
Math.floor(5.1) -- 5
Math.floor(-5.1) -- -6
Math.floor(-5.9) -- -6
*/
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
开关后面是L、L1、L2怎么接线呢? 以掌声为话题的作文!600字!!!初中的水平作文 望亭到无锡硕放经发七路怎么走 ...例如深大的是。370/170.他们这两个分数是怎么算的?这两个分数分别满... 专插本2B的分数线是看学校定的么? 玩nba2k23手游影响学习 什么是分子式,实验室,最简式 请问一下民生信用卡过期了要注销吗 实验式和分子式的区别 ...确定拿不到学位证了。可以拿到毕业证。家里人想让去澳大利... 和平精英人脸识别可以换人吗? 给出个数值,js循环计算出是几位数,只学到了for W... JS中,输出1-10之间的随机整数,用Math.random()咋... 王者荣耀人脸识别可以换人吗? JS中,Math.floor()是不是和parseInt()是一样的作用... 王者荣耀人脸识别后可以换人吗? java Math类中的trunc()方法怎么没有了? 房产证和土地证怎样换成不动产登记证 房产证和土地证怎样换成不动产登记证 JS计算求整数 旧房产证换新房产证需要多少钱? JS 小数点 取整 房产证必须换不动产证吗 在javascript中 如何将0.56取整数 房产证换新证都需要什么文件资料 js怎么取大于一个数的最小整数 我的房子是84年的老房产证现在怎么换新证 js 转换成整形 房产证怎样换不动产证 jquery中怎么让小数向下取整数 js重写方法怎样在实际的项目中使用?举个例子,我现... 王者荣耀人脸识别可以换人吗 关于JS的代码 王者荣耀人脸识别系统一开始用了别人的人脸,之后... 王者荣耀人脸识别可以换人吗? js几个取整函数 js 向上取整就是单纯的遇到小数不管是0还是几就+1... 吃鸡为什么不能换一个人使用人脸识别? JS 中如何实现整除 王者荣耀实名验证和人脸识别 这次是一个人下次可以... 人脸识别怎么换人 小米立式无线充电器20w 放上去一会儿充起一会儿断... 吃鸡人脸识别怎么换人? 小米9pro无线充电器充几十秒就不充了,然后等会重... 王者荣耀把身份证改绑后人脸识别可以重新换人吗? 小米11无线充电就关机怎么回事 买了一个号腾讯出的人脸识别 但是那是他的 我想更... 小米WPC01ZM无线充电器为什么充一会就不充了? 小米80w无线充一直闪灯,无法充电什么情况? 用小米无线充电器为什么有时候显示充电,电量充不...