使用js或jq控制一个div,当滚动到页面顶部的时候固定在顶部,离开可继续滚动吗?

JavaScript020

使用js或jq控制一个div,当滚动到页面顶部的时候固定在顶部,离开可继续滚动吗?,第1张

代码:\x0d\x0a•$(function(){\x0d\x0a\x0d\x0a•//获取要定位元素距离浏览器顶部的距离\x0d\x0a\x0d\x0a•var navH = $(".nav").offset().top\x0d\x0a\x0d\x0a•//滚动条事件\x0d\x0a\x0d\x0a•$(window).scroll(function(){\x0d\x0a\x0d\x0a•//获取滚动条的滑动距离\x0d\x0a\x0d\x0a•var scroH = $(this).scrollTop()\x0d\x0a\x0d\x0a•//滚动条的滑动距离大于等于定位元素距离浏览器顶部的距离,就固定,反之就不固定\x0d\x0a\x0d\x0a•if(scroH>=navH){\x0d\x0a\x0d\x0a•$(".nav").css({"position":"fixed","top":0})\x0d\x0a\x0d\x0a•}else if(scroH 回答于 2022-11-16

回到顶部按钮的实现基本思想很简单,就是修改页面的scrollTop,难点就是去计算scrollTop。

实现回到顶部按钮,需要考虑几个细节:

1. 回到顶部的速度计算

2. 定时器需要关闭,不关闭会导致不停的执行回到顶部的事件

3. 回到顶部事件未结束,用户进行滚动页面,应该关闭定时器

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title></title>

<style>

#btn1{

position: fixed

bottom: 0

right: 0

}

</style>

<script>

window.onload = function(){

var oBtn=document.getElementById('btn1')

//用处,避免当按钮触发页面回到顶部时页面滚动这个过程未结束,用户此时人为滚动时页面不会准确响应用户

var bSys = true

var timer = null

window.onscroll = function(){

//当认为滚动页面,关闭定时器

if(!bSys){

clearInterval(timer)

}

bSys = false

}

oBtn.onclick = function()

{

//每30ms执行一次 scrollTop+iSpeed

timer = setInterval(function(){

var scrollTop=document.documentElement.scrollTop || document.body.scrollTop

//算速度 除以的数值越大,速度越慢

var iSpeed=Math.floor(0-scrollTop/5)

if(scrollTop == 0){

//不关闭定时器,会导致第一次回到顶部之后,导致不能在响应用户的滚动,不定的触发回到顶部,by三人行慕课

clearInterval(timer)

}

//当按钮启动页面滚动,设置为true

bSys=true

document.documentElement.scrollTop=document.body.scrollTop=scrollTop+iSpeed

}, 30)

}

}

</script>

</head>

<body style='height:2000px'>

<input type="button" id="btn1" value="回到顶部" />

</body>

</html>

实现原理:当页面加载的时候,把元素定位到页面的右下角,当页面滚动时,元素一直位于右下角,当用户点击的时候,页面回到顶部。

要点一:document.documentElement.clientWidth || document.body.clientWidth; 获得可视区的宽度。后面是兼容chrome,前面是兼容其它浏览器。

要点二:oTop.style.left = screenw - oTop.offsetWidth +"px" 当页面加载时,让元素的位置位于页面最右边,用可视区的宽度减去元素本身的宽度。

要点三:oTop.style.top = screenh - oTop.offsetHeight + scrolltop +"px"当页面滚动时,元素的Y坐标位置等于可视区的高度减去元素本身的高度,加上滚动距离。

要点四:document.documentElement.scrollTop = document.body.scrollTop =0当点击元素时,让页面的滚动距离为0.写两个是为了兼容。

参考:http://www.cnblogs.com/jingangel/archive/2012/03/08/2385939.html