JS實現(xiàn)利用閉包判斷Dom元素和滾動條的方向示例
本文實例講述了JS實現(xiàn)利用閉包判斷Dom元素和滾動條的方向。分享給大家供大家參考,具體如下:
一、判斷滾動條的方向,利用閉包首先保存滾動條的位置,然后當滾動時候不斷更新滾動初始值,然后通過差指判斷方向
function scroll(fn) {
//利用閉包判斷滾動條滾動的方向
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) });
二、判斷鼠標的移動方向
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);
// 初始化坐標
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;
})
}
三、判斷鼠標進入和出去某Dom元素的方式,這種沒有利用閉包原理
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('上方', '右側', '下方', '左側');
if (e.type == 'mouseover' || e.type == 'mouseenter') {
wrap.innerHTML = dirName[direction] + '進入';
} else {
wrap.innerHTML = dirName[direction] + '離開';
}
}
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);
}
}
更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數(shù)據(jù)結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數(shù)學運算用法總結》
希望本文所述對大家JavaScript程序設計有所幫助。
相關文章
詳解Bootstrap的aria-label和aria-labelledby應用
這篇文章主要介紹了詳解Bootstrap的aria-label和aria-labelledby應用的相關資料,需要的朋友可以參考下2016-01-01
vite打包優(yōu)化vite-plugin-compression的使用示例詳解
這篇文章主要介紹了vite打包優(yōu)化vite-plugin-compression的使用,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09
JavaScript隊列結構Queue實現(xiàn)過程解析
這篇文章主要介紹了JavaScript隊列結構Queue實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03
JavaScript實現(xiàn)為事件句柄綁定監(jiān)聽函數(shù)的方法分析
這篇文章主要介紹了JavaScript實現(xiàn)為事件句柄綁定監(jiān)聽函數(shù)的方法,結合實例形式分析了javascript事件綁定的常用技巧與注意事項,需要的朋友可以參考下2017-11-11
JavaScript 拾碎[三] 使用className屬性
Javascript 還可以通過className 屬性靈活的更改一個標簽元素的CSS 類選擇器來實現(xiàn)樣式的變化。2010-10-10

