欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

原生js拖拽功能制作滑動條實例代碼

 更新時間:2021年02月05日 08:39:17   作者:蔣偉平  
這篇文章主要介紹了原生js拖拽功能制作滑動條實例教程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

拖拽屬于前端常見的功能,很多效果都會用到j(luò)s的拖拽功能?;瑒訔l的核心功能也就是使用js拖拽滑塊來修改位置。一個完整的滑動條包括 滑動條、滑動痕跡、滑塊、文本 等元素,先把html代碼寫出來,如下所示:

<div class="bar_wrap" id="wrap"><!--外包裹元素-->
 <div class="bar_container"><!--滑動條-->
  <div class="bar_into"></div><!--滑動痕跡-->
 </div>
 <div class="bar_drag"><!--滑塊-->
  <div class="bar_text"></div><!--文本-->
 </div>
</div>

然后給各元素添加css樣式,完成下圖效果:

接下來通過分析功能,一步一步完成js代碼。

1. 獲取滑動條各個元素,代碼如下:

//獲取外包裹元素
 var eBarWrap = document.getElementById('wrap');
 //獲取滑動條
 var eBarCon = eBarWrap.getElementsByClassName('bar_container')[0];
 //獲取滑動痕跡元素
 var eBarInto = eBarWrap.getElementsByClassName('bar_into')[0];
 //獲取滑塊
 var eBarDrag = eBarWrap.getElementsByClassName('bar_drag')[0];
 //獲取文本元素
 var eBarText = eBarWrap.getElementsByClassName('bar_text')[0];

2. 獲取滑動最大值
因為滑塊只能在滑動條內(nèi)滑動,所以需要限制最大滑動位置。而DOM元素計算位置是從元素的左側(cè)開始,所以最大值應該是 滑動條的寬度-滑塊 的寬度,如下所示:

//獲取最大位置
 var nMax = eBarCon.offsetWidth - eBarDrag.offsetWidth;

3. 在滑塊上綁定鼠標按下事件函數(shù),實現(xiàn)拖拽滑塊功能,代碼如下:

 //滑塊添加拖拽事件
 eBarDrag.addEventListener('mousedown',function(event){
  
 });

3.1 獲取滑塊位置
需要拖動滑塊,肯定要先知道滑塊原來的位置,才能根據(jù)鼠標的移動來拖拽滑塊。在滑塊上綁定的事件函數(shù)上有傳入一個event對象,這個event對象代表當前事件的實例對象,包含當前事件相關(guān)信息。如下所示:

//滑塊添加拖拽事件
 eBarDrag.addEventListener('mousedown',function(event){
  //初始化鼠標開始拖拽的點擊位置
  var nInitX = event.clientX;
  //初始化滑塊位置
  var nInitLeft = this.offsetLeft;
 });

3.2 滑塊跟隨鼠標移動,修改滑動痕跡和文本數(shù)值
操作時,在滑塊上按下鼠標,再移動鼠標就可以使滑塊跟隨鼠標移動。但一般移動鼠標不可能只在滑動條上面移動,所以需要在頁面上綁定鼠標移動事件,如下所示:

//滑塊添加拖拽事件
 eBarDrag.addEventListener('mousedown',function(event){
  /*...*/

  //頁面綁定鼠標移動事件
  document.onmousemove = event=>{
   //鼠標移動時取消默認行為,避免選中其他元素或文字
   event.preventDefault();
   //獲取鼠標移動后滑塊應該移動到的位置
   let nX = event.clientX - nInitX + nInitLeft;
   //限制滑塊最大移動位置
   if(nX>=nMax){
    nX = nMax;
   }
   //限制滑塊最小移動位置
   if(nX<=0){
    nX = 0;
   }
   //修改滑塊位置(因為用的是箭頭函數(shù),所以this還是指向滑塊)
   this.style.left = nX + 'px';
   //修改滑動痕跡寬度
   eBarInto.style.width = nX + this.offsetWidth/2 + 'px';
   //修改文本數(shù)值
   eBarText.innerHTML = Math.ceil(nX/nMax*100)/10;
  };
 });

3.3 釋放鼠標時,固定滑塊位置
當釋放鼠標的時候,滑塊固定在當前移動到的位置,滑動痕跡和文本數(shù)值已經(jīng)一起修改。

//滑塊添加拖拽事件
 eBarDrag.addEventListener('mousedown',function(event){
  /*...*/

  //鼠標松開綁定事件,取消頁面上所有事件
  document.onmouseup = function(event){
   document.onmousemove = null;
   document.onmouseup = null;
  }
 });

鼠標按下事件函數(shù)就完成了?;瑒訔l的樣式都可以通過css實現(xiàn),但默認文本數(shù)值是空的,這不太合理,所以需要加多一句代碼,給文本元素默認賦值為0,如下所示:

//修改默認數(shù)值
 eBarText.innerHTML = 0;

4. 在滑動條上添加點擊事件
當點擊滑動條上除滑塊之外的位置時,滑塊應該直接滑動到鼠標點擊的位置。需要在滑動條上添加點擊事件實現(xiàn)此功能,代碼如下:

//滑動條添加點擊事件
 eBarCon.addEventListener('click',function(event){
  //設(shè)置滑動條位置
  var nLeft = this.offsetLeft;
  //獲取有定位的父元素
  var eParent = this.offsetParent;
  //循環(huán)所有有定位的父元素
  while(eParent){
   //添加定位父元素offsetLeft值,用于準確定位滑動條與頁面左側(cè)的距離 
   nLeft += eParent.offsetLeft;
   //再次獲取父元素外的定位父元素
   eParent = eParent.offsetParent;
  }
  //計算滑塊位置
  var nX = event.clientX - nLeft;
  //修改滑塊位置
  eBarDrag.style.left = nX +'px';
  //修改滑動痕跡寬度
  eBarInto.style.width = nX + eBarDrag.offsetWidth/2 + 'px';
  //修改文本數(shù)值
  eBarText.innerHTML = Math.ceil(nX/nMax*100)/10
 });

到此這篇關(guān)于原生js拖拽功能制作滑動條實例教程的文章就介紹到這了,更多相關(guān)js拖拽功能制作滑動條內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javascript事件冒泡簡單示例

    javascript事件冒泡簡單示例

    這篇文章主要介紹了javascript事件冒泡原因、顯示效果及阻止冒泡的方法,需要的朋友可以參考下
    2016-06-06
  • 淺談js中調(diào)用函數(shù)時加不加括號的問題

    淺談js中調(diào)用函數(shù)時加不加括號的問題

    下面小編就為大家?guī)硪黄獪\談js中調(diào)用函數(shù)時加不加括號的問題 。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 使用ajax的post同步執(zhí)行(實現(xiàn)方法)

    使用ajax的post同步執(zhí)行(實現(xiàn)方法)

    下面小編就為大家分享一篇使用ajax的post同步執(zhí)行(實現(xiàn)方法),具有很好的參考價值,希望對大家有所幫助
    2017-12-12
  • js實現(xiàn)防止被iframe的方法

    js實現(xiàn)防止被iframe的方法

    這篇文章主要介紹了js實現(xiàn)防止被iframe的方法,實例分析了兩種比較常用的javascript防止頁面被iframe的技巧,非常簡單實用,需要的朋友可以參考下
    2015-07-07
  • MVVM框架下實現(xiàn)分頁功能示例

    MVVM框架下實現(xiàn)分頁功能示例

    分頁這種組件,幾乎每一種框架都有這樣的組件,這篇文章主要介紹了MVVM框架下實現(xiàn)分頁功能示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 前端導航欄不變切換局部頁面的3種方法

    前端導航欄不變切換局部頁面的3種方法

    在開發(fā)網(wǎng)頁的過程中,經(jīng)常需要實現(xiàn)導航菜單的切換,下面這篇文章主要給大家介紹了關(guān)于前端導航欄不變切換局部頁面的3種方法,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2023-12-12
  • uniapp中uni.navigateBack返回后刷新頁面數(shù)據(jù)的實現(xiàn)

    uniapp中uni.navigateBack返回后刷新頁面數(shù)據(jù)的實現(xiàn)

    本文主要介紹了uniapp中uni.navigateBack返回后刷新頁面數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-11-11
  • 關(guān)于ES6字符串的擴展詳解

    關(guān)于ES6字符串的擴展詳解

    es6這個String對象倒是擴展了不少方法,但是很多都是跟字符編碼相關(guān),下面這篇文章主要給大家介紹了關(guān)于ES6字符串擴展的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 基于JS實現(xiàn)回到頁面頂部的五種寫法(從實現(xiàn)到增強)

    基于JS實現(xiàn)回到頁面頂部的五種寫法(從實現(xiàn)到增強)

    這篇文章主要介紹了基于JS實現(xiàn)回到頁面頂部的五種寫法(從實現(xiàn)到增強)的相關(guān)資料,本文介紹的非常詳細,實用性也非常高,非常具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • js獲取當前日期時間及其它日期操作匯總

    js獲取當前日期時間及其它日期操作匯總

    這篇文章主要介紹了js獲取當前日期時間及其它日期操作匯總,感興趣的小伙伴們可以參考一下
    2016-03-03

最新評論