• js的窗口坐标及拖拽


    一、事件对象的坐标属性
    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单位

    A True Master Is An Eternal Student(真正的大师总是怀着一颗学徒的心) ------(Master Yi)
  • 相关阅读:
    C-二维数组,多维数组
    C-冒泡排序,选择排序,数组
    C语言的学习-基础知识点
    设置程序图标-初识IOS
    UIActivityIndicatorView-初识IOS
    生命周期-初识IOS
    机器学习
    开源的python机器学习模块
    基于Python使用scrapy-redis框架实现分布式爬虫 注
    Scrapy研究探索(六)——自动爬取网页之II(CrawlSpider)
  • 原文地址:https://www.cnblogs.com/karl-kidd/p/12630131.html
Copyright © 2020-2023  润新知