JS实现利用闭包判断Dom元素和滚动条的方向示例
本文实例讲述了JS实现利用闭包判断Dom元素和滚动条的方向。分享给大家供大家参考,具体如下:
一、判断滚动条的方向,利用闭包首先保存滚动条的位置,然后当滚动时候不断更新滚动初始值,然后通过差指判断方向
functionscroll(fn){
//利用闭包判断滚动条滚动的方向
varbeforeScrollTop=document.body.scrollTop,
fn=fn||function(){};
window.addEventListener("scroll",function(){
varafterScrollTop=document.body.scrollTop,
delta=afterScrollTop-beforeScrollTop;
if(delta===0)returnfalse;
fn(delta>0?"down":"up");
beforeScrollTop=afterScrollTop;
},false);
}
scroll(function(direction){console.log(direction)});
二、判断鼠标的移动方向
functiondirection(){
varlastX=null,
lastY=null;
window.addEventListener("mousemove",function(event){
varcurX=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右,';
}elseif(curXlastY){
direction+='Y下';
}elseif(curY
三、判断鼠标进入和出去某Dom元素的方式,这种没有利用闭包原理
vargaga=function(wrap){
varwrap=document.getElementById(wrap);
varhoverDir=function(e){
varw=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=newArray('上方','右侧','下方','左侧');
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);
}elseif(window.attachEvent){
wrap.attachEvent('onmouseenter',hoverDir);
wrap.attachEvent('onmouseleave',hoverDir);
}
}
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。