滚动条三要素scrollTop clientHeight scrollHeight

滚动条三要素scrollTop clientHeight scrollHeight<!DOCTYPEhtml><html> <head> <metacharset=”utf-8″> <title></title> <scriptsrc=”js/jquery-3.3.1.min.js”type=”text/javascript”charset=”utf-8″></s…

大家好,又见面了,我是你们的朋友全栈君。

插件
https://github.com/inuyaksa/jquery.nicescroll

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
		<style type="text/css"> html,body{ 
     width: 100%; overflow: hidden; } *{ 
     margin: 0; padding: 0; } .wrap{ 
     width: 100%; height: 1500px; background: #00BFFF; } .twowrap{ 
     width: 100%; height: 1500px; background: #009688; } </style>
	</head>
	<body>
		<div class="wrap">
			
		</div>
		<div class="twowrap">
			
		</div>
	</body>
	<script type="text/javascript"> //我的方法是把原先的滚动条隐藏 然后通过设置scroll来控制滑动,不同的浏览器获得scroll的方法不同,具体看下面那个代码块 $("body").on("mousewheel",function(event){ 
     console.log(document.documentElement.scrollTop); if(document.documentElement.scrollTop < 0){ 
     document.documentElement.scrollTop = 0; }else{ 
     if(event.originalEvent.deltaY > 0){ 
     document.documentElement.scrollTop = document.documentElement.scrollTop + 100; }else if(event.originalEvent.deltaY < 0){ 
     document.documentElement.scrollTop = document.documentElement.scrollTop - 100; } } }) </script>
</html>


//变量scrollTop是滚动条滚动时,距离顶部的距离
		 	  var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
		 	  //变量windowHeight是可视区的高度
		 	  var windowHeight = document.documentElement.clientHeight || document.body.clientHeight;
		 	  //变量scrollHeight是滚动条的总高度
		 	  var scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
		 	  //滚动条到底部的条件
		 	  if (scrollTop + windowHeight == scrollHeight) { 
   
		// //写后台加载数据的函数 
		// }

滚动条的样式设置

/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
			::-webkit-scrollbar { 
   
				height: 10px;
    			width: 10px;
   			    background-color: #fff;
			}

			/*定义滚动条轨道 内阴影+圆角*/
			::-webkit-scrollbar-track { 
   
				
				border-radius: 10px;
				background-color: #F5F5F5;
			}

			/*定义滑块 内阴影+圆角*/
			::-webkit-scrollbar-thumb { 
   
				padding-top: 100px;
				-webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1), inset -1px -1px 0 rgba(0, 0, 0, .07);
				background-color: #dadada;
				min-height: 26px;
				border-radius: 4px;
			}

下面这个demo是自制滚动条,包括滚动条的拖动和内容区的滚动,目前还没有加入click事件,只能上下滚动(写的我腰疼)

html

<div class="leftNavWrap">
	<div class="leftNav">
		<div class="topNav leftNavScroll">
			<div class="scrollbarWrap">
				<div class="scrollbar">
					<div id="scrollSlider">
						
					</div>
				</div>
			</div>
			<div class="leftNavList" style="width: 97%;height: 1500px;">
				<div style="height: 500px;background: gray;">111111</div>
				<div style="height: 500px;background:green">222222</div>
				<div style="height: 500px;background: dodgerblue;">33333</div>
			</div>
		</div>
		<div class="bottomNav">
			
		</div>
	</div>
</div>

css

.leftNavWrap{ 
   
	position: absolute;
	left: 0;
	top: 0;
	height: 100%;
}
.leftNav{ 
   
	position: relative;
	height: 100%;
	width: 240px;
	background: #000000;
	overflow: hidden;
}
.topNav{ 
   
	position: relative;
	width: 100%;
	background: #38393e;
	margin-top: 61px;
	overflow-y: hidden;
}
.topNav::-webkit-scrollbar{ 
   
	width: 7px;
	height: 8px;
	background: #38393e;
}
.topNav::-webkit-scrollbar-thumb{ 
   
	border-radius: 5px;
	background: #73757b;
}

.bottomNav{ 
   
	position: relative;
	width: 100%;
	height: 150px;
	background: #FF9600;
	margin-top: 2px;
}



/**************自制滚动条*****************/
.scrollbarWrap{ 
   
	position: absolute;
	background: #FFFFFF;
	right: 0;
	top: 0;
	height: 100%;
	width: 7px;
}
.scrollbar{ 
   
	position: relative;
	height: 100%;
	width: 100%;
}
#scrollSlider{ 
   
	width:100%;
	position: relative;
	top:0;
	border-radius: 5px;
	background: #73757b;
}

js

(function(){ 
   
	setTopNavH()
	setScrollSlider()
})()

function setTopNavH(){ 
   
	let height = window.innerHeight - 130;
	$('.topNav').css({ 
   'height':height+'px'})
	
	$(window).resize(function(){ 
   
		height = window.innerHeight - 130;
		$('.topNav').css({ 
   'height':height+'px'})
		
	})
}

function setScrollSlider(){ 
   
	//记录最开始的元素的高度。。。在改变margin的时候元素的高度会跟着改变
	let elementHeight = $('.topNav')[0].scrollHeight;
	//滚动条的总长度
	let sHeight = $('.topNav')[0].scrollHeight;
	//可见高度
	let oHeight = $('.topNav')[0].offsetHeight;
	//百分比
	let a = oHeight/sHeight;
	//滑块高度
	let sliderHeight = oHeight * a;
	$('#scrollSlider').css({ 
   'height': sliderHeight + 'px'})
	
	$(window).resize(function(){ 
   
		let top = $('.leftNavList').css('marginTop').replace('px','');
		top = -parseInt(top);
		//滚动条的总长度
		sHeight = $('.topNav')[0].scrollHeight + top;
		//可见高度
		oHeight = $('.topNav')[0].offsetHeight;
		//百分比
		a = oHeight/sHeight;
		//滑块高度
		sliderHeight = oHeight * a;
		console.log(sHeight + ":::" + oHeight+"::::" +sliderHeight)
		$('#scrollSlider').css({ 
   'height': sliderHeight + 'px'})
	})
	
	$('.topNav').on('mousewheel',function(e){ 
   
		e = e || window.event; 
		//滚动条的总长度
		sHeight = $('.topNav')[0].scrollHeight;
		//可见高度
		oHeight = $('.topNav')[0].offsetHeight;
		let scrollY = e.originalEvent.deltaY;
		let sliderTop = $('#scrollSlider').css('marginTop').replace('px','');
		let sliderHeight = $('#scrollSlider').css('height').replace('px','');
		let navListTop = $('.leftNavList').css('marginTop').replace('px','');
		sliderTop = parseInt(sliderTop);
		sliderHeight = parseInt(sliderHeight);
		navListTop = parseInt(navListTop);
		
		if(scrollY > 0){ 
   
			sliderTop += oHeight/15;
			navListTop -= sHeight/14;
			if(sliderTop >= oHeight - sliderHeight){ 
   
				sliderTop = oHeight - sliderHeight;
				navListTop = oHeight - elementHeight;
			}
			$('#scrollSlider').css({ 
   'marginTop': sliderTop+'px'})
			$('.leftNavList').css({ 
   'marginTop': navListTop+'px'})
		}else{ 
   
			sliderTop -= oHeight/15;
			navListTop += sHeight/14;
			if(sliderTop <= 0){ 
   
				sliderTop = 0;
				navListTop = 0;
			}
			$('#scrollSlider').css({ 
   'marginTop': sliderTop + 'px'})
			$('.leftNavList').css({ 
   'marginTop': navListTop+'px'})
		}
	})
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • win10 虚拟显示器_电脑怎么设置虚拟显示器

    win10 虚拟显示器_电脑怎么设置虚拟显示器2017.7.7最近在做虚拟化,需要在虚机上虚拟出一个显示器,我使用的虚机是windows10,虚机里面有一张透传显卡(可看做是物理显卡),我尝试过一些方法,比如编写一个虚拟的WDDM显卡驱动,然后在显卡驱动上接上一个显示器,该方法是有效的,可以成功虚拟出一个显示器,但是在虚拟显示器上渲染数据使用的渲染引擎没有用到透传显卡,在性能上达不到我的要求,所以只好放弃用这种方法。于是,通过阅…

    2022年8月21日
    33
  • linux怎么将文件复制到别的文件_linux 文件夹复制

    linux怎么将文件复制到别的文件_linux 文件夹复制1.前言本文主要讲解linux怎么复制文件到其他文件夹。在Linux和Unix系统上工作时,复制文件和目录是您每天要执行的最常见任务之一。cp是一个命令行实用程序,用于复制Unix和Linux系统上的文件和目录。在本文中,我们将解释如何使用cp命令。linux怎么复制文件到其他文件夹2.如何使用cp命令cp命令的使用语法:cp[OPTIONS]源…目标源可以有一个或多个文件或目录作为参数,目标可以有一个文件或文件夹作为参数。当源和目标参数都是文件时,cp命令将第一

    2022年8月23日
    3
  • 【Linux 内核】Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )[通俗易懂]

    【Linux 内核】Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )[通俗易懂]一、下载Linux内核源码、二、使用VSCode阅读Linux内核源码

    2022年7月23日
    14
  • java hibernate 实现按条件删除多对象[通俗易懂]

    java hibernate 实现按条件删除多对象[通俗易懂]背景:在hibernate应用中,需要实现按条件删除功能场景:在方法中传入泛型对象,构建HQL语句思路:遍历对象属性,如果有值,表明该字段是删除条件,用它构建删除HQL。具体做法是遍历对象对象的所有get方法,然后通过方法反射获取到对象的值。然后再判断值是否为空,从而组装HQL语句使用例子:publicclasstestH{publicstaticvoidmain(String[]args){Sessionsession=sessi

    2022年6月16日
    30
  • 小米网关一二三代的区别【转载】网关,mesh ,zigbee「建议收藏」

    小米网关一二三代的区别【转载】网关,mesh ,zigbee「建议收藏」小米智能家居北京小米科技有限责任公司索要资料  一般一个网关覆盖150平米的房子没什么问题,但是如果设备离网关太远,同时又隔了两三堵墙,中间又没有其它设备,那就会有点问题(zigbee设备每个设备之间是可以桥接信号的,它会自动选取信号最好的路径)。所以,一般一个房子一个网关就够了。如果是大房子,网关最好放房子中间位置,先买一个网关,如果信号不够,再买多一个。下面我们就来简单的介绍一下小米网关一二三代的区别!小米网关一二三代的区别  小米多功能网关一代二代和三代有什么区别?最直观的区别在于小米多功能

    2022年8月11日
    5
  • 小米nfc模拟加密门禁卡详细图文教程(实测可用)—————– IC ID CUID卡区别

    小米nfc模拟加密门禁卡详细图文教程(实测可用)—————– IC ID CUID卡区别现在小区虽然都加装了智能门,可以通过手机NFC功能开启或者使用钥匙开启,但是有些用户并不知道原来手机是可以当钥匙使用的。今天我们来学习使用小米nfc模拟加密门禁卡,这样手机就可以变成一把钥匙了。以下是小米nfc模拟加密门禁卡步骤。1、非加密卡直接使用小米钱包的门卡模拟功能即可,如果能直接模拟的就不是加密卡。2、NFC手机支持的频段一般为13.56Mhz卡片,如果是其他门禁卡,手机贴上根本没反应的不可以模拟。3、只能模拟卡片的ID,不支持储值消费等功能。部分门禁等系统只认证卡片ID,所以有可能通过

    2022年5月4日
    254

发表回复

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

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