js的窗口坐标及拖拽

摘要:
1、 事件对象的坐标属性1.事件对象。offsetX对象事件。offsetY单击时,将获得标签左上角的坐标。2.事件对象。clientX事件对象。clientY单击时,窗口左上角的坐标。3.事件对象。pageX事件对象单击pageY时,如果页面左上角的坐标不滚动,则页面的左上角与窗口左上角重合,并且两个值不同varoDiv=document。查询选择器('div');o分区包括

一、事件对象的坐标属性
1、事件对象.offsetX 对象事件.offsetY
点击时,获取的是标签左上角的坐标
2、事件对象.clientX 事件对象.clientY
点击时,视窗左上角坐标
3、事件对象.pageX 事件对象.pageY
点击时,页面左上角坐标

如果没有滚动,页面左上角和视窗的左上角重合,两个数值是不同的

var oDiv = document.querySelector('div');
oDiv.onclick = function(e){
    //获取对象内容左上角坐标
    var x= e.offsetX;
    var y = e.offsetY;
    console.log(x,y);
    //获取视窗创就坐标
    var CX = e.clientX;
    var CY = e.clientY;
    console.log(CX,CY);
    获取Html文档,左上角的坐标
    var PX = e.pageX;
    var PX = e.pageY;
    console.log(PX,PY);
    console.log(e);
}

例子:

给一个宽高位100px的div做随着点击位置,中心点到达点击位置

var oDiv = document.querySelector('div')
//
var oDivHeight = oDiv.offsetHeight;
var oDivWidth = oDiv.offsetWidth;
window.onclick = function(e){
    //给定位重新赋值,让定位中top和left的值发生改变,从而达到改变div位置
    // 在原始数值的基础上,再减去定位标签,宽高的一半
    oDiv.style.left = e.clientX - oDiv.offsetWidth/2 + 'px';
    oDiv.style.top = e.clientY -oDiv.offsetHeight/2 + 'px';
}

二、利用窗口坐标实现拖拽效果示例:

// 拖拽的效果
// 当鼠标按下,并且鼠标移动时发生位移事件
//获取div标签
var oDiv = document.querySelector('div');
// 在div移动之前,先记录原始的定位数据
var oldTop = window.getComputedStyle(oDiv).top;
var oldLeft = window.getComputedStyle(oDiv).left;

// 当鼠标按下时,鼠标移动,添加事件
window.onmousedown = function(){
    //console.log('鼠标按下');
    window.onmousemove = function(e){
        //console.log('鼠标滑动');
        // 将鼠标的坐标,作为div定位的数值,定位的是中心的位置
        oDiv.style.left = e.clientX - oDiv.offsetWidth/2 + 'px' ;
        oDiv.style.top = e.clientY - oDiv.offsetHeight/2 + 'px' ;
    }
}
// 当鼠标抬起时,鼠标移动,赋值null,就没有事件执行了,如果去掉这个函数,只要鼠标点过html,且还在html页面上,div就跟着移动即使没有点击div,也会跟着移动
window.onmouseup = function(){
//鼠标只要一抬起,失去移动效果
    window.onmousemove = null;
    // 可以再给div定义,定位位置,可以返回原始位置
    // 也在函数之外,记录存储原始位置
    oDiv.style.left = oldLeft;
    oDiv.style.top = oldTop;
}        

示例总结思路:
1,一定是 先按下事件,后移动事件 --- 先砍头再移尸
2,鼠标抬起,给移动定义事件为null
也可以添加其他操作,例如,让标签回到原位
回到原始位置,需要在程序的起始位置,先记录原始的定位坐标
3,基本思路
(1),在定义函数之外,获取浏览器窗口的宽度,高度
不能带有滚动条
(2),获取鼠标的坐标,根据项目需求,来计算表现定位的数值
鼠标的坐标,要根据实际需求而定,目前使用的是相对可视窗口左上角的定位
项目需求不同,+ / - 的数值也不同
(3),设定极值
最小值为 0 0
最大值为 可视窗口宽度/高度 - 标签X轴/Y轴最终占位
(4),将最终的数据,作为标签定位的坐标
必须拼接px单位

免责声明:文章转载自《js的窗口坐标及拖拽》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇自动AC机[转] Asp.net vNext webapi 自托管下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JS事件 失焦事件(onblur)onblur事件与onfocus是相对事件,当光标离开当前获得聚焦对象的时候,触发onblur事件,同时执行被调用的程序。

失焦事件(onblur) onblur事件与onfocus是相对事件,当光标离开当前获得聚焦对象的时候,触发onblur事件,同时执行被调用的程序。 如下代码, 网页中有用户和密码两个文本框。当前光标在用户文本框内时(即焦点在文本框),在光标离开该文本框后(即失焦时),触发onblur事件,并调用函数message()。 运行结果:  ...

分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容

分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容 在写JS的过程中,为了调试我们常常会 写很多 console.log、console.info、console.group、console.warn、console.error代码来查看JS 的运行情况,但发布时又因为IE不支持console,又要去掉这些代码,一不小心就会出错 问题...

JS实现图片预加载无需等待

网站开发时经常需要在某个页面需要实现对大量图片的浏览;用javascript来实现一个图片浏览器,让用户无需等待过长的时间就能看到其他图片 网站开发时经常需要在某个页面需要实现对大量图片的浏览,如果考虑流量的话,大可以像pconline一样每个页面只显示一张图片,让用户每看一张图片就需要重新下载一下整个页面。不过,在web2.0时代,更多人愿意用javas...

js和java中使用join来进行数组元素的连接

  合理地使用join来进行数组中元素的连接,代码简洁,比自己编码也更为方便。   js中join的用法 var arr = new Array(3) arr[0] = "a" arr[1] = "b" arr[2] = "c" arr.join(".") a.b.c ------------------ arr.join(",") a,b,c   ja...

深入 js 深拷贝对象

前言 对象是 JS 中基本类型之一,而且和原型链、数组等知识息息相关。不管是面试中,还是实际开发中我们都会碰见深拷贝对象的问题。 顾名思义,深拷贝就是完完整整的将一个对象从内存中拷贝一份出来。所以无论用什么办法,必然绕不开开辟一块新的内存空间。 通常有下面两种方法实现深拷贝: 迭代递归法 序列化反序列化法 我们会基于一个测试用例对常用的实现方法进行...

用js实现图片的无缝滚动效果

实现图片的无缝滚动就是要让你的图片集在一定时间里自动切换,那就需要js里的定时器来控制时间。   js中关于定时器的方法有两种:setTimeout和setInterval。它们接收的参数是一样的,第一个参数是函数,用于定时器的执行,第二个参数是数字,表示多少毫秒之后执行函数。它们的不同点在于setTimeout只执行一次指定的函数,而setInterva...