js模擬捲軸(橫向垂直)_javascript技巧
JS:
(function(win){
var doc = win.document,db = doc.body;
var mousewheel = win.document,db = doc.body;
var mousewheel = 文件中的 'onmousewheel' ? 'mousewheel' ? 'mousheel' 🎜 > var skyScroll = function(opts){ return new skyScroll.prototype.init(opts);};
skyScroll.prototype = { init:function ( opts){
var set = _extend({
dir:'top',
width:500,
回調:函數(){}
},opts||{});
.target = _$(set.target)
this; .parent = this.target.parentNode;
this.width = set.width; .dir;
this.callback = set.callback ;
this.addWarpper(set.dir);
this.addVscroll();
休息中;
this.addLscroll();
休息中;
this.addVscroll();
this.addLscroll();
};
_addEvent(doc,'mousedown',function(e){
);
if(target == _this.vScroll || target == _this.lScroll){
pos.tLeft = parseInt(_this.target.style .left); 🎜> mousemoveHandle = _mo usemoveHandle.call(_this,pos,目標);
_addEvent(doc,'mousemove',mousemoveHandle);
Event(doc,'mousemove',mousemoveHandle)}); }; 🎜> = _this.vScrollOuter || 目標== _this.lScrollOuter){
_mounsedownHandle. 🎜> });
},
//外部提供重新計算捲軸高度或寬度以及滾動範圍的方法,用於動態改變內容時,請做相對應的調整
var H = this.target.offsetHeight,W = this.target.offsetWidth,T = parseInt(this.target.style.top),L = parseInt(this.target.style.left),h,w;
this.ratio = {l:this.width / W,v:this.height / H};
this.range = {l:W-this.width, t: H - this.height};
if(this.vScroll){
h = Math.round(Math.pow(this/height h = Math.round(Math.pow)/height
this.vScroll.style.height = h 'px';
this.vScroll.style.top = Math.round(this.height * (-T/H)) 'px';
this.range.st = this.height - h;
this.wrapper.style.height = this.height 'px';
};
if(this.lScroll){
this.lScroll.style.width = w 'px';
this.lScroll.style.left = Math.round(this.width * (-L/W)) 'px';
this.range.sl = this.width - w;
this.wrapper.style.width = this.width 'px';
};
},
//对外提供设置滚动条的位置的方法
set:function(pos){
if(!_isObject(pos)) throw new Error('参数类型错误,参数必须是object!');
if(pos.top && !isNaN(parseInt(pos.top)) && this.vScroll){
var top = Math.min(pos.top,this.range.t);
this.target.style.top = -top + 'px';
this.vScroll.style.top = Math.round(this.height * (top / this.target.offsetHeight)) + 'px';
};
if(pos.left && !isNaN(parseInt(pos.left)) && this.lScroll){
var left = Math.min(pos.left,this.range.l);
this.target.style.left = -left + 'px';
this.lScroll.style.left = Math.round(this.width * (left / this.target.offsetWidth)) + 'px';
};
},
addWarpper:function(dir){
if(this.wrapper) return;
var _this = this,W = this.target.offsetWidth,H = this.target.offsetHeight,mousewheelHandle;
this.wrapper = _createEl('',this.parent);
this.wrapper.appendChild(this.target);
this.target.style.cssText = 'position:absolute;top:0;left:0';
switch(dir){
case 'top':
this.wrapper.style.height = this.height + 'px';
this.wrapper.style.width = W + 'px';
break;
case 'left':
this.wrapper.style.height = H + 'px';
this.wrapper.style.width = this.width + 'px';
break;
default :
this.wrapper.style.width = this.width + 'px';
this.wrapper.style.height = this.height + 'px';
};
_addEvent(this.wrapper,'mouseenter',function(e){
var pos = {};
pos.tTop = parseInt(_this.target.style.top);
pos.tLeft = parseInt(_this.target.style.left);
if(_this.vScroll) pos.sTop = parseInt(_this.vScroll.style.top);
if(_this.lScroll) pos.sLeft = parseInt(_this.lScroll.style.left);
mousewheelHandle = _mousewheelHandle.call(_this,pos);
_addEvent(_this.wrapper,'mousewheel',mousewheelHandle);
_addEvent(_this.wrapper,'mouseleave',function(){_removeEvent(_this.wrapper,'mousewheel',mousewheelHandle)});
});
},
//对外提供添加竖向滚动条的方法
addVscroll:function(){
if(this.vScroll) return;
!this.wrapper && this.addWarpper('top');
this.vScrollOuter = _createEl('',this.wrapper)
this.vScroll = _createEl('',this.wrapper);
this.recalculated();
},
//对外提供添加横向滚动条的方法
addLscroll:function(){
if(this.lScroll) return;
!this.wrapper && this.addWarpper('left');
this.lScrollOuter = _createEl('',this.wrapper)
this.lScroll = _createEl('',this.wrapper);
this.recalculated();
} tion(){
_deleteScroll.call(this, 1,this.vScroll,this.vScrollOuter,this.lScroll,this.lScrollOuter );
},
//刪除橫向的捲> _deleteScroll.call(this ,0,this.lScroll,this.lScrollOuter,this.vScroll,this.vScrollOuter) ;
}
};
roll = skyScroll;
/*************************私有函數*************************/
function _mousemoveHandle(pos,target){
函數(e){
e = e ||視窗.事件;
.style.top = Math.min(0,Math.max(pos .tTop (pos.y - newPos.y)/_this.ratio.v,-_this.range.t)) 'px ';
target.style.top = Math.max(0,Math.min(pos .sTop - pos.y newPos.y,_this.range.st)) 'px';
_this.callback.call(_this); }:function(e){
e = e ||視窗.事件;
var newPos = _getMousePos(e); Math.min(0,Math.max(pos.tLeft (pos.x - newPos.x)/_this.ratio.l,-_this.range.l)) 'px ';
target.style.left = Math.max(0,Math.min(pos.sLeft - pos.sLeft - pos.Left newPos.x,_this.range.sl)) 'px';
_this.callback.call(_this);
🎜> };
function _mousewheelHandle(pos){
var _this = this;
返回this.vScroll ?函數(e){
e = e ||視窗.事件;
wheelDelta /120 : -e.detail/3;
var top = parseInt(_this.target.style.top);
var dist = 資料* 5;
_this.target.style .top = Math.min(0,Math.max(top dist / _this.ratio.v, -_this.range.t)) 'px';
_this.vScroll.style.top = Math.max(0 _this.vScroll.style.top = Math.max(0 _this.vScroll.style.top = Math.max(0 ,Math.min(sTop-dist,_this.range.st)) 'px';
_this.callback.call(_this);
_this.callback.call(_this);
:function(e){
e = e ||窗口.事件;
_stopEvent(e);
var data = e.wheelDelta ? e.wheelDelta /120 : -e.detail/3;
var left = parseInt(_this.target.style.left);
var sLeft = parseInt(_this.lScroll.style.left);
var dist = 資料 * 5;
_this.target.style.left = Math.min(0,Math.max(left dist / _this.ratio.l, -_this.range.l)) 'px';
_this.lScroll.style.left = Math.max(0,Math.min(sLeft-dist,_this.range.sl)) 'px';
_this.callback.call(_this);
}
};
function _mounsedownHandle(pos,target){
var _this = this;
var elPos = _getElementPosition(target);
if(target == this.vScrollOuter){
console.log(pos.y - elPos.y);
_this.set({
}else{
_this.set({
});
};
};
function _deleteScroll(n,s1,s11,s2,s22){
var o = n ? '高度' : '寬度' ,s = n ? '頂' : '左';
if(!s1) 回傳;
this.wrapper.removeChild(s1);
this.wrapper.removeChild(s11);
n ?
if(!s2){
this.wrapper.parentNode.appendChild(this.apptarget);
this.wrapper.parentNode.removeChild(this.wrapper);
this.target.style.cssText = '';
this.wrapper = null;
}else{
this.wrapper.style[o.toLowerCase()] = this.target['offset' o] 'px';
this.recalculated();
};
this.target.style[s] = '0px';
//this.target.style[o.toLowerCase()]= 'auto';
};
/*************************工具函數*************************/
function _$(id){
return typeof id === 'string' ? doc.getElementById(id) : id;
};
function _extend(target,source){
for(var key in source) target[key] = source[key];
回目標;
};
function _createEl(html,parent){
var div = doc.createElement('div');
div.innerHTML = html;
el = div.firstChild;
父級 && 父級.appendChild(el);
回 el;
};
function _getMousePos(e){
if(e.pageX || e.pageY) return {x:e.pageX,y:e.pageY};
return {
x:e.clientX document。documentElement.scrollLeft ument.documentElement.scrollTop - document.body.clientTop
};
};
function _isObject(o){
return o === Object(o);
};
function _getElByClass(node,oClass,parent){
var re = [],els,parent = 父級 ||文件
for(var i=0,len=els.length;i
};
再回;
};
函數 _stopEvent(e){
e.stopPropagation ? e.stopPropagation() : (e.cancelBubble = true);
e.preventDefault ? e.preventDefault() :(e.returnValue = false);
};
function _addEvent(el,type,fn){
if(typeof el.addEventListener != 'undefine el.addEventListener('滑鼠懸停',_findElement(fn),false);
}else if(type === 'mouseleave'){
}else{
時使用中使用);
}
}else if(typeof el.attachEvent!= '
}else{
el['on' type] = fn;
}
};
function _removeEvent(el,type,fn){
if(typeof el.removeEventListener !=
}else if(typeof el.detachEvent != 'undefined'){
el.detachfn('on' type,);
}else{
el['on' type] = null;
}
};
function _findElement(fn){
return function(e){
while(parent &&parent != this)parent =parent.parentNode;
if(parent != this) fn.call(this,e);
}
};
function _cancelSelect(){
if (window.getSelection) {
window.getSelection().empty();
} else if (window.getSelection().removeAllRanges) { // Firefox
}
}else if (document.selection) { // IE?
}
};
function _getElementPosition(el){
var x = 0,y=0;
if(el.getBoundingClientRect){
var pos = el.getBoundingClientRect();
var d_root = document.documentElement,db = document.body;
x = pos.left Math.max(d_root.scrollLeft,db.scrollLeft) - d_root.clientLeft;
y = pos.top Math.max(d_root.scrollTop,db.scrollTop) - d_root.clientTop;
}else{
while(el != db){
y = el.offsetTop;
el = el.offsetParent;
};
};
return {
x:x,
};
})(視窗);
;
標題>
<script> <BR> target:'scrollTest' <BR> }); <BR> var add = document.getElementById('add'); <BR> 🎜> var setTop = document.getElementById ('setTop'); <BR> var setLeft = document.getElementById('setLeft'); <BR> document.getElementById('addSl') ; <BR> var delSt = document.getElementById('delSt'); <BR> var delSl = document.getElementById('delSunc') < 🎜> var w = scrollTest. offsetWidth; <BR> scrollTest.innerHTML = scrollTest.innerHTML; <BR> setTop.onclick = function(){ <BR> a.set({top:200} ); <BR> } <BR> setLeft.onclick = function(){ <BR> 🎜> addSt.onclick = function(){ <BR> a .addVscroll(); <BR> }; <BR> addSl.onclick = function(){ < }; <BR> delSt.onclick = function(){ <BR> a .delVscroll(); <BR> } <BR> delSl.onclick = function(){ <BR> <BR> </script>

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

與 Windows 10 不同,Windows 11 具有新的現代“流暢捲軸”,當使用者與之互動時會改變形狀。 Fluent 捲軸本質上是動態的,它們會在不同的外形尺寸或當您更改視窗大小時自動縮放,並且它目前在設定、媒體播放器等應用程式中使用。根據微軟的一項新提議,Google瀏覽器可能很快就會擁有流暢的捲軸功能。微軟在一份提案中表示,他們希望對 Chrome 中的舊捲軸進行現代化

react隱藏滾動條滾動的方法:1、開啟對應的「react-native」檔案;2、透過horizontal設定水平滾動;3、透過設定「showsHorizontalScrollIndicator」的值為「false」來隱藏水平捲軸即可。

近日有一些小夥伴諮詢小編Mac系統滾動條怎麼設定始終顯示?下面就為大家帶來了Mac系統滾動條設定始終顯示的方法,有需要的小伙伴可以來了解了解哦。第一步:在系統開始選單,選擇【系統偏好設定】選項。第三步:在系統偏好設定頁面,選擇【通用】選項。第三步:在通用頁面,選擇【始終】顯示捲軸。

當捲軸未啟動或未使用時,Windows作業系統允許使用者指定是否應自動隱藏它們。另一方面,Windows預設啟用捲軸。如果任何使用者想在他們的系統上啟用或停用此功能,請參閱這篇文章,以幫助他們了解如何操作。如何在Windows11中啟用或停用始終顯示捲軸1.按住Windows+U鍵將開啟系統上的輔助功能頁面。 2.透過點擊它來選擇視覺效果,它位於輔助使用頁面的頂部。 3.如果要在系統上啟用始終顯示捲軸功能,請點擊始終顯示捲軸切換按鈕將其打開,如下所示。 4.您可以隨時透過點擊「始終顯示

標題:如何寫出帶有捲軸的HTML文字方塊程式碼HTML中的文字方塊是常用的使用者輸入控制項之一,在某些情況下,文字內容過長時會導致文字方塊顯示不完整。這時,我們可以透過新增捲軸來讓文字方塊支援滾動查看。本文將詳細介紹如何撰寫具有捲軸效果的HTML文字方塊程式碼,並給出具體的程式碼範例。一、使用textarea元素建立文字方塊在HTML中,我們使用textarea元素來建立文字框

如何將捲軸設定為始終可見在現代版本的MacOS中,從Ventura13.0開始,您可以透過執行下列操作將捲軸設定為始終可見:前往Apple選單並選擇「系統設定」前往「外觀」尋找「顯示捲軸」並選擇「始終」旁的開關變更立即可見,您將立即在Mac上任何存在捲軸或捲動區域的地方看到捲軸。無需再猜測,您可以立即直觀地看到可以滾動和不能滾動的位置。

HTML滾動條怎麼做,需要具體程式碼範例在網頁設計中,滾動條是一個常見的元素,它可以使網頁在內容過多的情況下,能夠方便地滾動查看。本文將介紹如何使用HTML建立捲軸,並提供具體的程式碼範例。首先,我們需要了解HTML中建立捲軸的基本原理。 HTML中可以使用CSS樣式來控制捲軸的外觀和行為。具體來說,我們可以使用CSS屬性對捲軸進行設置,其中常用的屬性有o

css實作捲軸不佔用高度的方法:1、開啟對應的HTML檔案;2、尋找原始程式碼「overflow-x: auto;」;3、將「overflow-x: auto;」屬性中的值修改為「 overflow-x: overlay;」即可使捲軸不佔據位置。
