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 相关文章推荐
用JS实现一个页面多个css样式实现
May 29 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
Apr 07 Javascript
Js点击弹出下拉菜单效果实例
Aug 12 Javascript
JavaScript 经典实例日常收集整理(常用经典)
Mar 30 Javascript
浅谈mint-ui 填坑之路
Nov 06 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
Dec 27 Javascript
使用JS模拟锚点跳转的实例
Feb 01 Javascript
详解Vue结合后台的列表增删改案例
Aug 21 Javascript
详解Vue demo实现商品列表的展示
May 07 Javascript
详解webpack引用jquery(第三方模块)的三种办法
Aug 21 jQuery
详解从vue-loader源码分析CSS Scoped的实现
Sep 23 Javascript
JavaScript实现消消乐的源代码
Jan 12 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
第一节--面向对象编程
2006/11/16 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
2015/05/08 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
跟老齐学Python之dict()的操作方法
2014/09/24 Python
构建Python包的五个简单准则简介
2015/06/15 Python
Python pymongo模块用法示例
2018/03/31 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
python利用后缀表达式实现计算器功能
2021/02/22 Python
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
计算机科学与技术应届生求职信
2013/11/07 职场文书
优秀学生干部推荐材料
2014/02/03 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android