递归获取页面元素的真实offsetLeft和offsetTop

时间: 2019-06-03阅读: 419标签: 递归

由于父元素的定位属性, 导致子元素及其孙元素等的offsetLeft和offsetTop变得和预期不一致(预期上都是到屏幕左边和上边的位置), 由于需要做鼠标拖动旋转和鼠标框选, 所以必须拿到统一坐标系的相对位置的值(距离屏幕左上角), 于是就有了递归计算元素的真实offsetleft和offsettop的值;


css初始化;

<style>
* {
  margin: 0px;
  padding: 0px;
}
</style>


随意布局, top, left, padding,margin随意填写

<div class="c" style="position: absolute;left:10px;top: 10px;padding: 20px;">
  <div class="b" style="position: relative;left:-50px;top:-60px;padding: 200px;">
    <div id="a" style="width: 400px;height: 400px; border: 1px solid red;">
      123123123
    </div>
  </div>
</div>
<script>
  let a = document.getElementById('a');
  console.log(a);//a元素
  console.log(a.offsetTop);//实际上此时a的offsetTop和a的offsetLeft已经被父元素的定位所改变, 不准确
  console.log(a.offsetLeft);
  document.onmousedown = function (e) {
    console.log(e.clientX)
    console.log(e.clientY)
    console.log(getreal(a));
  }
    
  function getreal(el, pname = 'body') {
    let left = el.offsetLeft;
    let top = el.offsetTop;
    if (el.offsetParent && el.offsetParent.tagName !== pname) {//默认一致计算到body, 实际上需要根据需求(实际坐标点)进行修改, 可以用className或者id或者别的什么的, 灵活改变;
      let p = getreal(el.offsetParent, pname);
      left += p[0];
      top += p[1];
    }
    return [left, top];
  }
</script>


吐血推荐

1.站长广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入...

2.休闲娱乐: 直播/交友    优惠券领取   网页游戏   H5游戏

链接: http://www.fly63.com/article/detial/3523

vue依赖注入、递归组件的用法

在组件上面使用 ref 这个属性绑定,属性值自取,然后就可以通过 $refs.属性名 这种方式去获取到指定组件的实例了。其实不仅仅是组件能够使用 ref ,标签元素也能使用。

Js递归

传统的递归思想:自已调用自已,但是调用栈里面的执行上下文会越来越多,容易暴栈。采用尾递归可以规避这个问题:每次入栈出栈再入栈

Vue 和递归组件

有人说递归很难理解,也有人不这么认为。递归函数简单的定义是:一个自调用函数,这意味着它将在执行的某个时刻调用自己。从理论上讲,递归是一种需要两个属性的行为:

浅谈javascript中的递归和闭包

递归和闭包作为js中很重要的一环,几乎在前端的面试中都会涉及,特别闭包。今天前端组的组长冷不丁的问了我一下,粗略的回答了一下,感觉不太满足,于是重新学习了一下,写下本篇。

递归思想与实战

递归算法对于一个程序员应该算是最经典的算法之一,而且它越想越乱,很多复杂算法的实现也都用到了递归,例如深度优先搜索,二叉树遍历等。面试中常常会问递归相关的内容(深拷贝,对象格式化,数组拍平,走台阶问题等)

js递归实现方式

递归函数就是在函数体内调用本函数;递归函数的使用要注意函数终止条件避免死循环;递归实现形式:1.声明一个具名函数,通过函数名调用,2. 使用arguments.callee代替函数名

递归算法的理解

所谓递归,就是既有传递,又有回归,与其说是传递与回归,初学不如理解是一种 “循序递进”与“规律约束”。为什么这样说,因为递归算法相比较于循环在代码结构方面个人认为更加简洁清晰,清晰易懂,递归注重的是一种有序的规律

js利用递归与promise 按顺序请求数据

项目中有一个需求,一个tabBar下面如果没有内容就不让该tabBar显示,当然至于有没有内容,需要我们通过请求的来判断,但是由于请求是异步的,如何让请求按照tabBar的顺序进行?

JS递归及二叉搜索树的移除节点

递归含义:在某时某刻某个条件下调用包含自己的函数;注意点:⑴递归过程中一定要加限制条件,要不然会陷入死循环:递归有个过程,不是一步到位的,这一点尤其重要

递归与循环的区别

递归:你打开面前这扇门,看到屋里面还有一扇门(这门可能跟前面打开的门一样大小(静),也可能门小了些(动)),你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全