本文收集整理自网上。

一,判断滚动条的方向,利用闭包首先保存滚动条的位置,然后当滚动时候不断更新滚动初始值,然后通过差指判断方向

     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 === ) return false;
fn(delta > ? "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 / )) * (w > h ? (h / w) : ),
y = (e.clientY - wrap.offsetTop - (h / )) * (h > w ? (w / h) : ),
// 上(0) 右(1) 下(2) 左(3)
direction = Math.round((((Math.atan2(y, x) * ( / Math.PI)) + ) / ) + ) % ,
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);
}
}

本文结束。

利用闭包判断Dom元素和滚动条的方向的更多相关文章

  1. 判断DOM元素是否出现再浏览器窗口中

    几乎所有的项目都要解决这样一个问题:判断一个元素是否出现在浏览器窗口中?因为通过它我们可以极大的优化项目的性能,进而提升用户的的体验.原生javasxript获取浏览器的滚动距离和可视窗口的高度 使用 ...

  2. JQuery利用sort对DOM元素进行排序

    前言 排序对于我们是再熟悉不过了,在绝大数应用程序中都会有这样一个场景:当我们从服务器端获取一个列表时,在界面上进行渲染,我们可以会依赖于某一个规则来进行排序,当然此时绝大多数会再次与服务器进行交互来 ...

  3. 利用forEach循环Dom元素…

    大家都知道forEach是循环数组用的,而且很方便,可以丢掉for循环了,但是它不能循环Dom元素.其实我们可以利用call来完成forEach循环Dom; 假设有这样的HTML结构: <ul ...

  4. 利用box-flex实现 dom元素位置页面底部

    问题: 总是有这样的需求,就是页面上某部分要位于页面的最底部,此“最底部”要求:(1)当页面上内容不足一屏的时候,在最底部显示(2)当页面上内容不止一屏的时候,也就是有垂直滚动条的时候,要在内容的最后 ...

  5. JavaScript网站设计实践(四)编写about.html页面,利用JavaScript和DOM,选择性的显示和隐藏DIV元素

    一.现在我们在网站设计(三)的基础上,来编写about.html页面. 这个页面要用到的知识点是利用JavaScript和DOM实现选择性地显示和隐藏某些DIV about.html页面在前面我们为了 ...

  6. JS判断指定dom元素是否在屏幕内的方法实例

    前言 刷网页的时候,有时会遇到这样一个情景,当某个dom元素滚到可见区域时,或者图片的懒加载效果,它就会展现显示动画,十分有趣.那么这是如何实现的呢? 实现原理 想要实现这个功能,就要知道具体的实现原 ...

  7. JQUERY选择和操作DOM元素(利用正则表达式的方法匹配字符串中的一部分)

    JQUERY选择和操作DOM元素(利用正则表达式的方法匹配字符串中的一部分) 1.匹配属性的开头 $("[attributeName^='value']"); 2.匹配属性的结尾 ...

  8. JS-DOM ~ 03. 子节点的操作、style.样式和属性、dom元素的创建方法及操作、14个例题、主要是利用js直接控制html属性

    带有Element和不带的区别 a)  带Element的获取的是元素节点 b)  不带可能获取文本节点和属性节点 获取所以子节点 a)   . childNodes b)   . children ...

  9. 利用闭包解决for循环里onclick事件不能捕捉实时i值问题

    问题描述 我们都知道,如果我们对于一组元素(相同的标签)同时进行onclick事件处理的时候(在需要获取到索引的时候),一般是写一个for循环,但是onclick是一个异步调用的,所以会带来一个问题, ...

随机推荐

  1. java的值传递机制

    一.练习:编写Java程序,将二维数组中的行列互调显示出来. 代码1为自己编写: package com.xxgpra.CH6; public class Hangliehudiao_pra4 { p ...

  2. python3 urllib爬取wallhalla网站图片

    点我去我的github上看源码 简单使用静态方法爬取https://wallhalla.com/网站的图片 参考: https://blog.csdn.net/cquptcmj/article/det ...

  3. PAT-A Java实现

    1001 A+B Format (20) 输入:两个数a,b,-1000000 <= a, b <= 1000000 输出:a+b,并以每3个用逗号隔开的形式展示. 思路一: 1)计算出a ...

  4. cannot import name '_imaging' 报错

    例子如下: from PIL import Image import pytesseract as pt text = pt.image_to_string(Image.open("text ...

  5. go基础语法-函数

    1.基础定义 golang的函数很'纯粹',只有可变参数列表的概念,没有默认参数.可选参数.函数重载.操作符重载这些难以把控的概念 语法:'func'声明,而后函数名在前,中间的括号内定义参数,返回值 ...

  6. SQLite学习笔记

    参考书籍 <SQLite 权威指南 第二版> Windows获取SQLite 1.主页: www.sqlite.org 2.下载 Precompiled Binaries For Wind ...

  7. Java基础之this和super关键字用法

    this 在java中,this是一个引用当前类对象的引用变量,主要有以下几种用法: 引用当前类的实例变量· this关键字可以用来引用当前类的实例变量.如果实例变量和某个方法的参数之间存在歧义(实例 ...

  8. Vue.js核心概念

    # 1. Vue.js是什么? 1). 一位华裔前Google工程师(尤雨溪)开发的前端js库 2). 作用: 动态构建用户界面 3). 特点: * 遵循MVVM模式 * 编码简洁, 体积小, 运行效 ...

  9. LimitedConcurrencyLevelTaskScheduler

    //-------------------------------------------------------------------------- // // Copyright (c) Mic ...

  10. 一文带你了解 Raft 一致性协议的关键点

    此文已由作者孙建良授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Raft 协议的发布,对分布式行业是一大福音,虽然在核心协议上基本都是师继 Paxos 祖师爷(lampor ...