JS實(shí)現(xiàn)利用閉包判斷Dom元素和滾動(dòng)條的方向示例
本文實(shí)例講述了JS實(shí)現(xiàn)利用閉包判斷Dom元素和滾動(dòng)條的方向。分享給大家供大家參考,具體如下:
一、判斷滾動(dòng)條的方向,利用閉包首先保存滾動(dòng)條的位置,然后當(dāng)滾動(dòng)時(shí)候不斷更新滾動(dòng)初始值,然后通過(guò)差指判斷方向
function scroll(fn) {
//利用閉包判斷滾動(dòng)條滾動(dòng)的方向
var beforeScrollTop = document.body.scrollTop,
fn = fn || function() {};
window.addEventListener("scroll", function() {
var afterScrollTop = document.body.scrollTop,
delta = afterScrollTop - beforeScrollTop;
if (delta === 0) return false;
fn(delta > 0 ? "down" : "up");
beforeScrollTop = afterScrollTop;
}, false);
}
scroll(function(direction) { console.log(direction) });
二、判斷鼠標(biāo)的移動(dòng)方向
function direction() {
var lastX = null,
lastY = null;
window.addEventListener("mousemove", function(event) {
var curX = event.clientX,
curY = event.clientY,
direction = '';
// console.info(event);
// console.info(event.clientX);
// console.info(event.clientY);
// 初始化坐標(biāo)
if (lastX == null || lastY == null) {
lastX = curX;
lastY = curY;
return;
}
if (curX > lastX) {
direction += 'X右,';
} else if (curX < lastX) {
direction += 'X左,';
}
if (curY > lastY) {
direction += 'Y下';
} else if (curY < lastY) {
direction += 'Y上';
}
lastX = curX;
lastY = curY;
//console.info(direction);
document.getElementById("test").innerText = direction;
})
}
三、判斷鼠標(biāo)進(jìn)入和出去某Dom元素的方式,這種沒(méi)有利用閉包原理
var gaga = function(wrap) {
var wrap = document.getElementById(wrap);
var hoverDir = function(e) {
var w = wrap.offsetWidth,
h = wrap.offsetHeight,
x = (e.clientX - wrap.offsetLeft - (w / 2)) * (w > h ? (h / w) : 1),
y = (e.clientY - wrap.offsetTop - (h / 2)) * (h > w ? (w / h) : 1),
// 上(0) 右(1) 下(2) 左(3)
direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4,
eventType = e.type,
dirName = new Array('上方', '右側(cè)', '下方', '左側(cè)');
if (e.type == 'mouseover' || e.type == 'mouseenter') {
wrap.innerHTML = dirName[direction] + '進(jìn)入';
} else {
wrap.innerHTML = dirName[direction] + '離開(kāi)';
}
}
if (window.addEventListener) {
wrap.addEventListener('mouseover', hoverDir, false);
wrap.addEventListener('mouseout', hoverDir, false);
} else if (window.attachEvent) {
wrap.attachEvent('onmouseenter', hoverDir);
wrap.attachEvent('onmouseleave', hoverDir);
}
}
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
js實(shí)現(xiàn)input框文字動(dòng)態(tài)變換顯示效果
這篇文章主要介紹了js實(shí)現(xiàn)input框文字動(dòng)態(tài)變換顯示效果,涉及javascript隨機(jī)字符串與中文的動(dòng)態(tài)切換顯示效果,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
調(diào)用innerHTML之后onclick失效問(wèn)題的解決方法
調(diào)用innerHTML之后,onclick失效了,這也是在意料之中的,因?yàn)閕nnerHTML是以文本形式插入的button,所以無(wú)法識(shí)別onclick事件2014-01-01
Javascript文本框腳本實(shí)現(xiàn)方法解析
這篇文章主要介紹了Javascript文本框腳本實(shí)現(xiàn)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
解決layui使用layui-icon出現(xiàn)默認(rèn)圖標(biāo)的問(wèn)題
今天小編就為大家分享一篇解決layui使用layui-icon出現(xiàn)默認(rèn)圖標(biāo)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
使用javascript為網(wǎng)頁(yè)增加夜間模式
如何給Web頁(yè)面增加夜間模式功能? 其實(shí)所謂的夜間模式就是在頁(yè)面上增加一個(gè)透明的遮罩層,但是遮罩層會(huì)擋住頁(yè)面元素, 解決方法是 添加DIV,給DIV的outline屬性一個(gè)很大的outline-width值,用outline的邊框作為遮罩,這樣既能正常點(diǎn)擊頁(yè)面元素,又能達(dá)到夜間模式的效果2014-01-01
JS獲取頁(yè)面input控件中所有text控件并追加樣式屬性
使用jquery來(lái)在頁(yè)面加載時(shí)獲取頁(yè)面input控件中所有text控件并添加樣式,由于其他方式比較麻煩所以就想通過(guò)在頁(yè)面加載的時(shí)候?qū)⒁膭?dòng)的text找到并添加屬性,感興趣的你可以參考下,希望可以幫助到你2013-02-02
js數(shù)值計(jì)算時(shí)使用parseInt進(jìn)行數(shù)據(jù)類(lèi)型轉(zhuǎn)換(jquery)
這篇文章主要介紹了js數(shù)值計(jì)算時(shí)使用parseInt進(jìn)行數(shù)據(jù)類(lèi)型轉(zhuǎn)換(jquery),需要的朋友可以參考下2014-10-10

