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 相关文章推荐
JQuery UI的拖拽功能实现方法小结
Mar 14 Javascript
jQuery中ajax和post处理json的不同示例对比
Nov 02 Javascript
jquery实现表单验证并阻止非法提交
Jul 09 Javascript
JS通过Cookie判断页面是否为首次打开
Feb 05 Javascript
详解从react转职到vue开发的项目准备
Jan 14 Javascript
浅谈js闭包理解
Mar 28 Javascript
javascript获取select值的方法完整实例
Jun 20 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
Jun 26 Javascript
JAVA面试题 static关键字详解
Jul 16 Javascript
解决Vue调用springboot接口403跨域问题
Sep 02 Javascript
webpack安装配置与常见使用过程详解(结合vue)
Jun 01 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
Feb 04 jQuery
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
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
JavaScript 继承详解(二)
2009/07/13 Javascript
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
Python 字符串中的字符倒转
2008/09/06 Python
python如何通过protobuf实现rpc
2016/03/06 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
FFT快速傅里叶变换的python实现过程解析
2019/10/21 Python
python ftplib模块使用代码实例
2019/12/31 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
python安装sklearn模块的方法详解
2020/11/28 Python
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
家长会邀请书
2014/01/25 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
2019各种承诺书范文
2019/06/24 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
mysql中between的边界,范围说明
2021/06/08 MySQL
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫