js 簡易版滾動(dòng)條實(shí)例(適用于移動(dòng)端H5開發(fā))
廢話不多說,直接上代碼
<!DOCTYPE html> <html> <head> <title>滑動(dòng)條</title> <meta charset="utf-8"> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /> <script type="text/javascript" src="./hScoll.js"></script> </head> <style> *{ margin: 0; padding: 0; } #content{ margin-top: 50px; width:100%; height: 200px; background: #eeeeee; overflow: hidden; position: relative; /**transform: translate(0px, -70px);*/ } #scoll{ overflow: hidden; } #content2{ margin-top: 50px; width:100%; height: 200px; background: red; overflow: hidden; position: relative; /**transform: translate(0px, -70px);*/ } #scoll2{ overflow: hidden; } .scrollbars{ position: absolute; height: 100%; right: 0; top: 0; width: 5px; border-radius: 5px; } .scollb{ position: absolute; right: 0; top: 0; width: 100%; background: #999999; border-radius: 5px; } </style> <body> <div id="content"> <div id="scoll"> <p>1111</p> <p>2222</p> <p>3333</p> <p>4444</p> <p>5555</p> <p>6666</p> <p>7777</p> <p>8888</p> <p>9999</p> <p>0000</p> <p>aaaa</p> <p>bbbb</p> <p>cccc</p> <p>dddd</p> <p>eeee</p> </div> </div> </body> <script> var options ={ interactiveScrollbars:true } window.hScoll.buildScoll('content',options); </script> </html>
js代碼:
/** * Created by hechao on 2017/6/25. */ (function(){ /**添加window對(duì)象hScoll屬性*/ window.hScoll = { buildScoll:function(el,options){ App.init(el,options); } } var App = { /**初始化組件*/ init:function(el,option){ App.options = option; App.prevY = 0; App.el = document.getElementById(el); App.scoll = this.el.children[0]; App.h = this.el.offsetHeight;//滑動(dòng)范圍高度 App.ch = this.el.scrollHeight;//內(nèi)容的高度 if(parseFloat(this.h)<=parseFloat(this.ch)){ App.sdiv = document.createElement('div'); App.scollb = document.createElement('div'); App.sdiv.setAttribute('class','scrollbars'); App.scollb.setAttribute('class','scollb'); App.scollb.style.height = parseFloat(this.h)*parseFloat(this.h)/parseFloat(this.ch) + 'px'; App.el.appendChild(this.sdiv); App.sdiv.appendChild(this.scollb); App.initevent(); } }, /**綁定事件*/ initevent:function (){ App.el.addEventListener('touchstart', App.touchstart, false); App.el.addEventListener('touchmove', App.touchmove, false); App.el.addEventListener('touchend', App.touchend, false); }, /**記錄滑動(dòng)初始位置*/ touchstart:function(e){ var point = App.getPoint(e); App.startY = point.pageY; }, /**手指移動(dòng)時(shí),滾動(dòng)條滾動(dòng)*/ touchmove:function(e){ e.preventDefault();//阻止默認(rèn)行為 var point = App.getPoint(e); App.moveY = point.pageY; App.deltaY = App.startY - App.moveY; if((App.prevY - App.deltaY)<=0 && (App.prevY - App.deltaY)>= -(App.ch-App.h)){ App.domove(App.prevY - App.deltaY); } if(App.options.interactiveScrollbars){ App.domove2(App.prevY - App.deltaY); }else{ if((App.prevY - App.deltaY)<=0 && (App.prevY - App.deltaY)>= -(App.ch-App.h)){ App.domove2(App.prevY - App.deltaY); } } }, /**手指離開時(shí),判斷位置*/ touchend:function(e){ App.prevY = App.prevY - App.deltaY; if(App.prevY >= 0){ App.prevY = 0; App.domove(App.prevY,true); App.domove2(App.prevY,true); } if(App.prevY <= -(App.ch-App.h)){ App.prevY = -(App.ch-App.h); App.domove(App.prevY,true); App.domove2(App.prevY,true); } }, getPoint:function (e) { return e.touches ? e.touches[0] : e; }, /**內(nèi)容滑動(dòng)*/ domove:function (y,t){ if(t){ App.scoll.setAttribute('style', 'transform: translate(0px, '+y+'px);transition:transform 300ms ease'); }else{ App.scoll.setAttribute('style', 'transform: translate(0px, '+y+'px);transition:transform 0ms ease'); } }, /**滾動(dòng)條滑動(dòng)*/ domove2:function(y,t){ if(t){ App.scollb.setAttribute('style', 'transform: translate(0px, '+-parseFloat(y)*parseFloat(App.h)/parseFloat(App.ch)+'px);transition:transform 0ms ease;height:'+parseFloat(App.h)*parseFloat(App.h)/parseFloat(App.ch) + 'px'+''); }else{ App.scollb.setAttribute('style', 'transform: translate(0px, '+-parseFloat(y)*parseFloat(App.h)/parseFloat(App.ch)+'px);transition:transform 0ms ease;height:'+parseFloat(App.h)*parseFloat(App.h)/parseFloat(App.ch) + 'px'+''); } } } })();
以上這篇js 簡易版滾動(dòng)條實(shí)例(適用于移動(dòng)端H5開發(fā))就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談js基礎(chǔ)數(shù)據(jù)類型和引用類型,深淺拷貝問題,以及內(nèi)存分配問題
下面小編就為大家?guī)硪黄獪\談js基礎(chǔ)數(shù)據(jù)類型和引用類型,深淺拷貝問題,以及內(nèi)存分配問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09uni-app應(yīng)用配置manifest.json最全最詳細(xì)配置
這篇文章主要給大家介紹了關(guān)于uni-app應(yīng)用配置manifest.json最全最詳細(xì)配置,manifest.json文件是UniApp開發(fā)中用來配置應(yīng)用信息的重要文件,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01JavaScript作用域、閉包、對(duì)象與原型鏈概念及用法實(shí)例總結(jié)
這篇文章主要介紹了JavaScript作用域、閉包、對(duì)象與原型鏈,結(jié)合實(shí)例形式總結(jié)分析了javascript中變量與函數(shù)的作用域、閉包、對(duì)象、原形鏈相關(guān)概念、用法及注意事項(xiàng),需要的朋友可以參考下2018-08-08JavaScript實(shí)現(xiàn)讀取上傳視頻文件的時(shí)長和第一幀畫面過程講解
當(dāng)我們做一個(gè)后臺(tái)系統(tǒng)的音視頻管理模塊時(shí),通常要限制文件的大小和類型,這篇文章主要介紹了JavaScript實(shí)現(xiàn)讀取上傳視頻文件的時(shí)長和第一幀畫面過程,需要詳細(xì)了解實(shí)現(xiàn)方法可以參考下文2023-05-05JavaScript canvas實(shí)現(xiàn)雨滴特效
這篇文章主要為大家詳細(xì)介紹了JavaScript canvas實(shí)現(xiàn)雨滴特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01JavaScript defineProperty如何實(shí)現(xiàn)屬性劫持
雙向數(shù)據(jù)綁定的核心方法,主要是做數(shù)據(jù)劫持操作(監(jiān)控?cái)?shù)據(jù)變化),下面這篇文章主要給大家介紹了關(guān)于JavaScript defineProperty如何實(shí)現(xiàn)屬性劫持的相關(guān)資料,需要的朋友可以參考下2021-07-07jquery的$(document).ready()和onload的加載順序
最近在改一個(gè)嵌入在frame中的頁面的時(shí)候,使用了jquery做效果,而頁面本身也綁定了onload事件。改完后,F(xiàn)irefox下測試正常流暢,IE下就要等個(gè)十幾秒jquery的效果才出現(xiàn),黃花菜都涼了。2010-05-05