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 !!的作用
Dec 04 Javascript
JavaScript中“基本类型”之争小结
Jan 03 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
Jan 26 Javascript
JS嵌套函数调用上下文的问题解决
Mar 26 Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 Javascript
jQuery操作属性和样式详解
Apr 13 Javascript
原生js实现打字动画游戏
Feb 04 Javascript
Layui数据表格之获取表格中所有的数据方法
Aug 20 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
Oct 07 Javascript
详解vue路由篇(动态路由、路由嵌套)
Jan 27 Javascript
更优雅的微信小程序骨架屏实现详解
Aug 07 Javascript
Angular6使用forRoot() 注册单一实例服务问题
Aug 27 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/10/09 PHP
解析php中反射的应用
2013/06/18 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
jsPDF导出pdf示例
2014/05/02 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
详解小程序输入框闪烁及重影BUG解决方案
2018/08/31 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中字符编码简介、方法及使用建议
2015/01/08 Python
Python实现周期性抓取网页内容的方法
2015/11/04 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
Python 简单计算要求形状面积的实例
2020/01/18 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
2014感恩节演讲稿大全
2014/10/11 职场文书
语文复习计划
2015/01/19 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书