zoukankan      html  css  js  c++  java
  • css、js实现自定义滚动条的两种方式

    一般默认的滚动条会比较丑,我们可以利用css或者js来实现实现自定义滚动条的功能; 下面就整理2种实现方式

    1、css自定义滚动条

    需要在WebKit平台上才支持,代码如下:

    ::-webkit-scrollbar {
       8px;
    }
    ::-webkit-scrollbar-track {
      box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
      border-radius: 10px;
    }
    ::-webkit-scrollbar-thumb {
      border-radius: 10px;
      box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);
    }
    

      

    说明 :

    -webkit-scrollbar 定位整个滚动条元素。
     ::-webkit-scrollbar-track 仅针对滚动条轨道。 
    ::-webkit-scrollbar-thumb 瞄准滚动条拇指。

    新片场https://www.wode007.com/sites/73286.html 傲视网https://www.wode007.com/sites/73285.html

    2、原生js自定义滚动条

    实现思路: 

    1.外层设置一个div,在外层的div里面设置一个特别高的div(高度为外层5个div的高度),在高的div里面设置5个div,每个div的高度,都和父级的高度相同  
    2.在外层div的右侧边框以里自定义一个滚动条,(本人用div设置样式作为滚动条)  
    3.最外层的div添加onmousewheel事件,使用e.wheelDelta来获取每次滑动的距离,若为正数则向上滑动,将每次增加的数,赋给滚动条的top值,若为负数则向下互动,将每次减少的值,赋值给滚动条的top值,并对特别高的div作对应的上下平移处理 
     4.注意:滚动条的高度需要和高的div的高度成比例滑动

     代码:

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>自定义滚轮事件</title>
    		<style type="text/css">
    			*{
    				padding: 0;
    				margin: 0;
    			}
    			#wrap{
    				height: 500px;
    				 300px;
    				position: relative;
    				/*超出隐藏*/
    				overflow: hidden;
    				margin: 200px auto 0;
    				border: 3px solid black;
    			}
    			#content{
    				 300px;
    				/*不需要设置高度,可被图片撑开*/
    				position: absolute;
    				left: 0;
    				top: 0;
    				border: 1px solid red;
    			}
    			#content  > div{
    				 294px;
    				/*去除图片间的间隙*/
    				vertical-align: top;
    				height: 500px;
    				border: 1px solid red;
    				text-align: center;
    				font-size: 100px;
    				line-height: 500px;
    			}
    			#sliderWrap{
    				height:100% ;
    				16px ;
    				background-color: greenyellow;
    				position: absolute;
    				right: 0;
    				top: 0;
    			}
    			#slider{
    				 10px;
    				height: 50px;
    				background-color: blue;
    				position: absolute;
    				left: 3px;
    				top: 0px;
    				border-radius: 10px;
    			}
    		</style>
    	</head>
    	<body>
    		<div id="wrap">
    			<div id="content">
    				<div>1</div>
    				<div>2</div>
    				<div>3</div>
    				<div>4</div>
    				<div>5</div>
    			</div>
    			<!--右侧滚动条部分-->
    			<div id="sliderWrap">
    				<div id="slider">
    					
    				</div>
    			</div>
    		</div>
    	</body>
    	<script type="text/JavaScript">
    		var wrapDiv = document.getElementById("wrap");
    		var contentDiv = document.getElementById("content");
    		var sliderWrap = document.getElementById("sliderWrap");
    		var slider = document.getElementById("slider");
    		//设置比例
    		//clientHeight - 不包括border
    		var scale = wrapDiv.clientHeight / contentDiv.clientHeight;
    		//设置滑块的高度
    		var h1 = sliderWrap.clientHeight * scale;
    		//为了合理设置高度,设置滑块的最小高度
    		if (h1 < 50) {
    			h1 = 50;
    		}else if (scale >= 1) {
    			//说明当前内容能过完全显示在可视区域内,不需要滚动条
    			sliderWrap.style.display = "none";
    		}
    		//设置滑块的高度
    		slider.style.height = h1 +"px";
    		//设置y轴的增量
    		var y = 0;
    		//为wrap添加滚轮事件
    		wrapDiv.onmousewheel = function(e){
    			var event1 = event || e
    			if (event.wheelDelta < 0) {
    				//滑动条向下滚动
    				y += 10;
    			}else if (event.wheelDelta > 0) {
    				//滑动条向上滚动
    				y -= 10;
    			}
    			//y变化时说明在滚动,此时使滚动条发生滚动,以及设置content内容部分滚动
    			//判断极端情况,滑块不能划出屏幕
    			if (y <= 0) {
    				//滑块最多滑到顶部
    				y = 0;
    			}
    			if(y >= sliderWrap.clientHeight - slider.clientHeight){
    				//滑块最多滑到最底部
    				y = sliderWrap.clientHeight - slider.clientHeight;
    			}
    			//更新滑块的位置
    			slider.style.top = y +"px";
    			scale = wrapDiv.clientHeight / contentDiv.clientHeight;
    			contentDiv.style.top = - y / scale +"px";
    		}
    	</script>
    </html>
    

      

     
  • 相关阅读:
    从零开始——PowerShell应用入门(全例子入门讲解)
    详解C# Tuple VS ValueTuple(元组类 VS 值元组)
    How To Configure VMware fencing using fence_vmware_soap in RHEL High Availability Add On——RHEL Pacemaker中配置STONITH
    DB太大?一键帮你收缩所有DB文件大小(Shrink Files for All Databases in SQL Server)
    SQL Server on Red Hat Enterprise Linux——RHEL上的SQL Server(全截图)
    SQL Server on Ubuntu——Ubuntu上的SQL Server(全截图)
    微软SQL Server认证最新信息(17年5月22日更新),感兴趣的进来看看哟
    Configure Always On Availability Group for SQL Server on RHEL——Red Hat Enterprise Linux上配置SQL Server Always On Availability Group
    3分钟带你了解PowerShell发展历程——PowerShell各版本资料整理
    由Find All References引发的思考。,
  • 原文地址:https://www.cnblogs.com/ypppt/p/13333287.html
Copyright © 2011-2022 走看看