DOM-11 【兼容】鼠标行为坐标系、pageXY封装、拖拽函数封装

鼠标行为

e.属性含义相关属性
clientX/Y鼠标位置相对于当前可视区域的坐标x/y(FF火狐部分版本不支持)
pageX/Y(IE9以下不支持)鼠标位置相对于当前文档的坐标layerX/Y (IE11以下同clientX/Y)
screenX/Y鼠标位置相对于显示器屏幕的坐标
offsetX/Y鼠标位置相对于块元素的坐标(以左上角为顶点,包括边框,Safari不包括边框)

pageXY封装

// 兼容性写法:获取相对文档的位置
function pagePos(e) {var sLeft = getScrollOffset().left,sTop = getScrollOffset().top,cLeft = document.documentElement.clientLeft || 0,// 获取文档偏移,若值为undefined,取偏移为0cTop = document.documentElement.clientTop || 0;return {X: e.clientX + sLeft - cLeft,Y: e.clientY + sTop - cTop,}
}

拖拽

  • mousemove是基于mousedown事件的
oBox.onmousedown = function (e) {document.onmousemove = function (e) {var e = e || window.event,page = pagePos(e);oBox.style.left = page.X + 'px'oBox.style.top = page.Y + 'px'}
}
oBox.onmouseup = function (e) {document.onmousemove = null
}
// 拖拽的时候,box的左上角顶点不要突变到鼠标的位置
oBox.onmousedown = function (e) {var e = e || window.event,x = pagePos(e).X - parseInt(getStyles(this, 'left')),y = pagePos(e).Y - parseInt(getStyles(this, 'top'));document.onmousemove = function (e) {var e = e || window.event,page = pagePos(e);oBox.style.left = page.X - x + 'px'oBox.style.top = page.Y - y + 'px'}document.onmouseup = function (e) {this.onmousemove = nullthis.onmouseup = null}
}
// 封装拖拽函数
function elemDrag(elem) {var x,y;addEvent(elem, 'mousedown', function (e) {var e = e || window.event;x = pagePos(e).X - parseInt(getStyles(elem, 'left'))y = pagePos(e).Y - parseInt(getStyles(elem, 'top'))console.log(x, y)addEvent(document, 'mousemove', mouseMove)addEvent(document, 'mouseup', mouseUp)cancelBubble(e)preventDefaultEvent();function mouseMove(e) {var e = e || window.event,page = pagePos(e)elem.style.top = page.Y - y + 'px'elem.style.left = page.X - x + 'px'}function mouseUp(e) {var e = e || window.eventremoveEvent(document, 'mousemove', mouseMove)removeEvent(document, 'mouseup', mouseUp)}})
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java --replaceAll方法

public void abc(){String str "aabbccdd";str str.replaceAll("\\d","数字");system.out.println("str"); } 转载于:https://www.cnblogs.com/gjack/p/8325778.html

mysql分页优化

一般分页这样写 select * from goods limit 50,20 从50行开始取20行,即第51行到70行 当数据量少当时候这样并没有什么问题,但是如果 select * from goods limit 1000000,20 查询耗时骤升。 这种方式是查询出100000020行,再取20行,…

DOM-10 面向对象开发Todolist

将插件配置项写在html的div里&#xff0c;data-config自定义属性&#xff0c;外单引号&#xff0c;内双引号&#xff08;内部是JSON字符串&#xff09; <div class"todo-wrap" data-config{"plusBtn":"j-show-input","inputArea":…

计网 --- 域名服务系统:因特网的目录服务

主机名: // 主机的一种标识方法如: cnn.com www.yahoo.com gaia.cs.umass.edu cis.poly.edu主机名可能由不定长的字母数字组成,路由器难以处理.由于这些原因, 主机也可以使用IP地址(IP address) 进行标识 // 简略介绍ip地址 // 一个IP地址由4个字节组成,并有着严格的层次结构…

Ansible基础概述

一、Ansible简介 Ansible基于Python语言实现&#xff0c;由paramiko和PyYAML两个关键模块构建。Ansible的编排引擎可以出色地完成配置管理&#xff0c;流程控制&#xff0c;资源部署等多方面工作。Ansible公司负责Ansible开源软件的维护&#xff0c;管理。一般软件的更新大概每…

selenium浏览器驱动下载地址整理

今天把手头有的一些关于selenium测试的资源整理了一下&#xff0c;分享出来。 1. 所有版本chrome下载 是不是很难找到老版本的chrome&#xff1f;博主收集了几个下载chrome老版本的网站&#xff0c;其中哪个下载的是原版的就不得而知了。 http://www.slimjet.com/chrome/google…

DOM-12 【模拟桌面待讲评】鼠标事件深入、点击与拖拽分离、双击事件

鼠标事件深入 点击事件 mousedown mouseupposition: absolute 会将内联元素变为块级&#xff08;比如a&#xff09;a标签的协议限定符&#xff08;伪协议&#xff0c;防止跳转和刷新&#xff0c;让href不生效&#xff09;&#xff0c;javascript:;&#xff0c;可以让点击和拖…

scrapy的操作

转载于:https://www.cnblogs.com/mengqingjian/p/8337772.html

http --- HTTPS是在安全的传输层上发送的HTTP

HTTPS: // HTTPS是最常见的HTTP安全版本 // 是在安全的传输层上发送的HTTP// 将HTTP报文发送给TCP之前,先将其发送给了一个安全层(通过SSL协议实现),对其进行加密.然后再发送给TCP // 在服务器端,通过提取商量好的密钥进行解密HTTPS方案: // 对Web服务器发起请求时,需要有一种…

Devexpress xaf针对某个用户登录后在面板中设置导航无效的解决方法

Devexpress xaf框架生成的项目默认情况下导航栏是显示在左侧&#xff0c;有时候我们用某个账户登录后&#xff0c;发现导航栏无法显示在左侧&#xff0c;操作十分不方便。我们可以去数据库删除当前登录用户的自定义布局 解决方法如下: 1、查询PermissionPolicyUser用户表&#…

DOM-13 【实战】输入及状态改变事件、京东搜索框

模块化 IIFE window.onload function () {init() }function init() {keySearch()others() // 多人开发的模块 }var keySearch (function () {var searchKw document.getElementById(J_search_kw),autoKw document.getElementById(J_autoKw),recomKw JSON.parse(document…

吴恩达“机器学习”——学习笔记二

定义一些名词 欠拟合&#xff08;underfitting&#xff09;&#xff1a;数据中的某些成分未被捕获到&#xff0c;比如拟合结果是二次函数&#xff0c;结果才只拟合出了一次函数。 过拟合&#xff08;overfitting&#xff09;&#xff1a;使用过量的特征集合&#xff0c;使模型过…

Http 概述

Http是可靠的数据传输协议。资源Web服务器是Web资源&#xff08;resource&#xff09;的宿主。包括静态文件以及动态的内容。 媒体类型Http对每种需要由web传输的对象都打上了名为MIME类型的数据格式标签。主要的mime类型: text/htmltext/plainimage/jpegimage/gifvideo/quickt…

DOM-14 【实战】解决事件代理和鼠标移动事件的窘态

鼠标的滑入滑出 案例 事件现象应用场景mouseover/mouseout绑定在父元素时&#xff0c;对她的所有子元素&#xff0c;事件都生效dom结构简单mouseenter/mouseleave只对她绑定的元素有效&#xff0c;对window绑定无效dom结构简单mousemove长触发dom结构复杂// 绑定在父元素上 /…

项目开发的一般流程

项目开发的一般流程 确定项目需求&#xff1a;拿下一个项目编写《需求说明书》&#xff1a;使用文字和图片的形式将业务表现清楚。不涉及技术&#xff0c;只涉及业务需求。这个环节要和客户反复沟通。编写《概要设计说明书》&#xff1a; 涉及技术的的宏观性的内容&#xff0c;…

获取日期的区间数组

Date.prototype.Format function (fmt) { //author: meizz var o { "M": this.getMonth() 1, //月份 "d": this.getDate(), //日 "h": this.getHours(), //小时 "m": this.getMinutes(), //分 "s": this.getSeconds(), /…

javascript --- 再读作用域和闭包

执行环境: // 定义了变量或函数有权访问的其他数据,决定了它们各自的行为 // 每个执行环境都有一个与之关联的变量对象 // 执行环境中定义的所有变量和函数都保存在这个变量中执行环境与函数: // 每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个…

DOM-15/16【实战】鼠标行为预测技术

鼠标预测行为动作复杂&#xff0c;使用事件代理得不偿失&#xff0c;在数量有限的情况下&#xff0c;使用循环绑定更好用户从menu斜着向右下角滑入时&#xff0c;可能是进入main&#xff0c;也可能是要选择子菜单&#xff0c;在判断前先做延迟如何判断用户进入main的意图&#…

SQLMAP命令详解

1.基础信息 python sqlmap/sqlmap.py -u "http://url/news?id1" --current-user #获取当前用户名称 python sqlmap/sqlmap.py -u "http://www.xxoo.com/news?id1" --current-db #获取当前数据库名称 python sqlmap/sqlmap.py -u "http://www.xxoo.…

Nginx命令大全

sudo nginx #打开 nginx nginx -s reload|reopen|stop|quit #重新加载配置|重启|停止|退出 nginx nginx -t #测试配置是否有语法错误nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]-?,-h : 打开帮助信息 -v : 显示版本信…