1. 程式人生 > >自定義滾動條—比例移動和滑鼠移動時移除其他功能的相容程式碼

自定義滾動條—比例移動和滑鼠移動時移除其他功能的相容程式碼

要點:

1.因為各個不同版本的瀏覽器的,他們的滾動條的樣式不是一樣的,為了統一,自定義樣式。

2.核心問題跟上一個案例(高清放大鏡)是一樣的,就是怎麼保證成比例移動問題

3.滑鼠移動時,去除其他功能的相容程式碼問題

程式碼:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    .box {
      width: 300px;
      height: 500px;
      border: 1px solid red;
      margin: 100px;
      position: relative;
      overflow: hidden;
    }

    .content {
      padding: 5px 18px 5px 5px;
      position: absolute;
      top: 0;
      left: 0;

    }

    .scroll {
      width: 18px;
      height: 100%;
      position: absolute;
      top: 0;
      right: 0;
	  background-color: #797272;
    }

    .bar {
      height: 100px;
      width: 100%;
      position: absolute;
      top: 0;
      left: 0;
      background-color: #BF7777;
      border-radius: 10px;
      cursor: pointer;
    }
  </style>
</head>
<body>
	<div class="box" id="box">
	  <div class="content" id="content">

	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。
	   好好學習,天天向上,毛主席說的。

	  </div><!--文字內容-->
	  <div id="scroll" class="scroll"><!--裝滾動條的層-->
	    <div class="bar" id="bar"></div><!--滾動條-->
	  </div>
	</div>

	<script type="text/javascript">
		function myGet(id){
			return document.getElementById(id);
		}

		var box = myGet("box");
		// 獲取顯示文字區域的盒子
		var content = myGet("content");
		// 實際的內容
		var scroll = myGet("scroll");
		// 獲取z裝滾動條的部分
		var bar = myGet("bar");
		// 獲取滾動條
		var height = scroll.offsetHeight * (box.offsetHeight / content.offsetHeight);
		bar.style.height = height + "px";
		// 滑動條的高度 = 裝滑動條的容器高度 * 文字顯示區域的高度和文字內容高度的比值

		bar.onmousedown = function(e){
			var spaceY = e.clientY - bar.offsetTop;
			// 滑鼠點選時,點選位置距離上邊的距離
			document.onmousemove = function(e){
				var y = e.clientY - spaceY;
				y = y<0 ? 0 : y;
				y = y>scroll.offsetHeight - bar.offsetHeight ? scroll.offsetHeight - bar.offsetHeight : y;
				// 控制滾動條的移動範圍
				bar.style.top = y + "px";

				window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
				// 滑鼠移動時,移除其他功能的相容程式碼

				var moveY = y * ((content.offsetHeight-box.offsetHeight)/(scroll.offsetHeight-bar.offsetHeight));
				// 內容移動距離 = 滾動條移動的距離 * 內容移動最大值和滾動條移動最大值的比值
				content.style.marginTop = -moveY + "px";
			}
		}
		document.onmouseup = function(){
			document.onmousemove = null;
		}
	</script>
	
</body>
</html>

效果: