如何在不移动元素的情况下计算元素的位置
How to calculate where an element should be without moving it?
我需要改变元素的水平位置。要做到这一点,我用.css('left', value)
改变它的left
属性。如果没有定义left
值,这将使元素相对于它应该在的位置移动。
现在我需要重新计算位置,将元素移动到其他地方,要做到这一点,我需要元素的位置,如果我没有改变它的left
属性。
我可以删除left
值并请求其位置,但这样元素也会移动,并且希望避免这种情况,因为我可能会使元素在位置之间跳转。
我怎样才能得到元素的位置呢?
如果多次更改left
样式,元素不会在位置之间跳转。只要您的函数正在运行,浏览器中就不会有更新。您可以安全地重置left
样式,获取位置,然后设置新的left
值。
一种方法是读取DOM-ready上元素的默认左值,并将其作为元素的data-*
属性添加到元素中-让我们称之为data-default-left
或类似的东西。当你需要使用默认值时,你可以随时引用这个值。
data-*
很容易使用jQuery的.data()
方法。
将left设置为0,重新计算,并将left设置为新位置将是您的情况下最简单的更改。根据我的经验,浏览器不会在css更新之间重新绘制。
其他选项:
-
使用绝对定位代替相对定位。
-
使用jQuery UI位置插件。它允许你设置一个元素相对于另一个元素的位置。非常有用。
在开始移动之前如何使用.data()
来存储此信息?然后每次你需要的时候你就把它收集回来。
很简单。将初始剩余量存储在dom加载时的一个变量中,然后在以后进行其他计算时引用它:
$(function () {
var $element = $("#ME_ELEMENT_ID");
var initialLeft = $element.offset().left;
// Change your left here
$element.css('left', '200px');
// initialLeft still contains the old value
});
相关文章:
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在不传递此信息的情况下查找被调用的元素
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 如何在不影响其他元素的情况下扩展DIV
- 在不移动内部文本的情况下缩放元素的效果
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 如何在没有回调的情况下获取有关元素的信息
- Ajax:只在元素存在的情况下调用Ajax
- 是否可以在不重新渲染的情况下显示/隐藏父对象中的元素
- jQuery-如何在给定延迟的情况下从元素中删除类
- 在不引用文档的情况下使用AngularJS获取元素
- JavaScript-在不影响索引的情况下将元素插入数组
- 如何在不使用multipleparent()调用的情况下找到(元素表的)第一个祖先
- 是否可以在不创建svg对象的情况下创建捕捉元素?[snap.svg]
- 在没有大量回调函数的情况下在列表元素上循环播放同一动画
- 在不使用sort()的情况下获取HTML LI元素的副本
- 如何在不使用任何 html 输入/搜索元素的情况下读取本地客户端文本文件
- 如何在不丢失格式的情况下连续淡入() 元素文本的每个字符,包括嵌套元素
- 如何在不创建新元素的情况下修改 DOM 元素的位置
- 在不使用 CSS 的情况下,将元素与浏览器屏幕顶部保持设定的距离