JavaScript自定義滾動條詳解

admin發表於2018-12-31

分享一段程式碼例項,它實現了自定義滾動條效果。

下面就分享一下此程式碼,並詳細介紹一下它的實現過程。

程式碼例項如下:

[HTML] 純文字檢視 複製程式碼執行程式碼
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
#parent {
  width: 600px;
  height: 20px;
  background-color: #ccc;
  position: relative;
}
#antzone {
  width: 20px;
  height: 20px;
  background-color: red;
  position: absolute;
  top: 0;
  left: 0px;
}
#div2 {
  width: 0;
  height: 0;
  background-color: green;
}
</style>
<script type="text/javascript">
window.onload = function() {
  var oDiv1 = document.getElementById("antzone");
  var oDiv = document.getElementById("parent");
  var oDiv2 = document.getElementById('div2');
  var tarX = 0;
  oDiv1.onmousedown = function(ev) {
    var oEvent = ev || event;
    tarX = oEvent.clientX - oDiv1.offsetLeft;
    document.onmousemove = function(ev) {
      var oEvent = ev || event;
      var l = oEvent.clientX - tarX;
      if (l < 0) {
        l = 0;
      }
      if (l > (oDiv.offsetWidth - oDiv1.offsetWidth)) {
        l = oDiv.offsetWidth - oDiv1.offsetWidth;
      }
      oDiv1.style.left = l + 'px';
      var scale = l / (oDiv.offsetWidth - oDiv1.offsetWidth)
      document.title = scale;
      oDiv2.style.width = 400 * scale + 'px';
      oDiv2.style.height = 400 * scale + 'px';
    }
    oDiv1.onmouseup = function() {
      document.onmousemove = null;
      document.onmouseup = null;
    }
  }
}
</script>
</head>
<body>
<div id="parent">
  <div id="antzone"></div>
</div>
<div id="div2"></div>
</body>
</html>

上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。

一.程式碼註釋:

(1).window.onload = function() {},當文件內容完全載入完畢再去執行函式中的程式碼。

(2).var oDiv1 = document.getElementById("antzone"),獲取id屬性值為antzone的元素物件。

(3).var oDiv = document.getElementById("parent"),獲取id屬性值為parent的元素物件。

(4).var oDiv2 = document.getElementById('div2'),獲取id屬性值為div2的元素物件。

(5).var tarX = 0,宣告一個變數並賦值為0。

(6).oDiv1.onmousedown = function(ev) {},紅色的元素物件註冊onmousedown事件處理函式。

(7).var oEvent = ev || event,實現事件物件的相容性處理。

(8).tarX = oEvent.clientX - oDiv1.offsetLeft,獲取當前滑鼠指標在客戶區橫向座標與紅色元素距離父元素距離的差。

(9).document.onmousemove = function(ev) {},註冊onmousemove事件處理函式,之所以註冊在document元素之上,是利用事件冒泡規則,防止滑鼠指標滑出的現象。

(10).var oEvent = ev || event,實現事件物件的相容性處理。

(11).var l = oEvent.clientX - tarX,獲取紅色元素距離父元素左側的距離。

(12). if (l < 0) {

    l = 0;

},如果防止紅色元素拖出父元素的左邊框。

(13).if (l > (oDiv.offsetWidth - oDiv1.offsetWidth)) {

  l = oDiv.offsetWidth - oDiv1.offsetWidth;

},和上面同樣的道理,防止拖出父元素的有邊框。

(14).oDiv1.style.left = l + 'px',設定紅色元素的left屬性值。

(15).var scale = l / (oDiv.offsetWidth - oDiv1.offsetWidth),獲取拖動完成的比例。

(16).document.title = scale,設定網頁title屬性值為上面獲取的比例。

(17).oDiv2.style.width = 400 * scale + 'px',獲取odiv2元素的寬度。

(18).oDiv2.style.height = 400 * scale + 'px',獲取odiv2元素的高度。

(19).oDiv1.onmouseup = function() {

  document.onmousemove = null;

  document.onmouseup = null;

},取消事件處理函式的註冊。

二.相關閱讀:

(1).onmousedown事件參閱JavaScript mousedown事件一章節。

(2).事件物件相容參閱var ev=window.event||ev的作用是什麼一章節。

(3).clientX參閱JavaScript event.clientX一章節。

(4).offsetLeft參閱JavaScript offsetleft一章節。

(5).onmousemove參閱JavaScript mousemove事件一章節。

(6).offsetWidth參閱JavaScript offsetWidth一章節。

(7).onmouseup參閱JavaScript mouseup事件一章節。

相關文章