JS实现利用闭包判断Dom元素和滚动条的方向示例


Posted in Javascript onAugust 26, 2019

本文实例讲述了JS实现利用闭包判断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去除空格的几种方法
Oct 03 Javascript
将两个div左右并列显示并实现点击标题切换内容
Oct 22 Javascript
JQuery1.8 判断元素是否绑定事件的方法
Jul 10 Javascript
全面接触神奇的Bootstrap导航条实战篇
Aug 01 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
Nov 07 Javascript
vue v-model表单控件绑定详解
May 17 Javascript
Vue filter介绍及其使用详解
Oct 21 Javascript
JS实现数组的增删改查操作示例
Aug 29 Javascript
vue拖拽组件使用方法详解
Dec 01 Javascript
js中值引用和地址引用实例分析
Jun 21 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
Aug 09 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
Sep 24 Javascript
JS实现提示效果弹出及延迟隐藏的功能
Aug 26 #Javascript
小程序实现层叠卡片滑动效果
Aug 26 #Javascript
微信小程序 数据缓存实现方法详解
Aug 26 #Javascript
使用typescript构建Vue应用的实现
Aug 26 #Javascript
微信小程序实现手势滑动卡片效果
Aug 26 #Javascript
微信小程序实现左侧滑栏过程解析
Aug 26 #Javascript
vue柱状进度条图像的完美实现方案
Aug 26 #Javascript
You might like
神族 Protoss 历史背景
2020/03/14 星际争霸
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
php强制运行广告的方法
2014/12/01 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
如何在基于vue-cli的项目自定义打包环境
2018/11/10 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
Vue-router 报错NavigationDuplicated的解决方法
2020/03/31 Javascript
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
Cpy和Python的效率对比
2015/03/20 Python
使用Python求解最大公约数的实现方法
2015/08/20 Python
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
2019/09/04 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物