【问题标题】:jQuery get an elements position when it has been animated using css3 animationsjQuery在使用css3动画制作动画时获取元素位置
【发布时间】:2012-02-24 03:44:13
【问题描述】:

如果您使用 CSS3 动画在屏幕上为相对位置的元素定位内容

-moz-transform: translate(125px, 5px);

当您使用 javascript 询问项目位置时,它会报告该项目仍然存在

top:0
left:0

例如,看看这个使用 jQuery Isotope 插件的例子中元素的位置:

http://isotope.metafizzy.co/demos/basic.html

我必须像这样使用 jQuery css() 方法吗?我什至不知道这是否有效!

$(element).css('-moz-transform')

更新:

我在 JsFiddle http://jsfiddle.net/uQtur/3/ 上发布了一个示例

JS

var elements = $('.element').each(function(i, e){
    var el = $(this);
    var position = el.position();
    var offset = el.offset();

    console.log('position', position);
    console.log('offset', offset);

    var positionLeft = window.getComputedStyle(el.get(0), null).getPropertyValue('left');
    var positionTop = window.getComputedStyle(el.get(0), null).getPropertyValue('top');

    console.log('computed position left', positionLeft);
    console.log('computed position top', positionTop);  

    var transform = el.css('-moz-transform');
    console.log(transform);

    // > matrix(1, 0, 0, 1, 340px, 10px)
});

HTML

<div id='container'>
    <div class='element' style='left: 0px; top: 0px; -moz-transform: translate(10px, 10px);'>
        H
    </div>
    <div class='element' style='left: 0px; top: 0px; -moz-transform: translate(120px, 10px);'>
        He
    </div>
    <div class='element' style='left: 0px; top: 0px; -moz-transform: translate(230px, 10px);'>
        He
    </div>
    <div class='element' style='left: 0px; top: 0px; -moz-transform: translate(340px, 10px);'>
        He
    </div>
</div>

【问题讨论】:

  • 您能否发布一个演示(可能在JS Fiddle)让我们玩来帮助回答您的问题?
  • 我会尝试,尽管我得到的只是“502:网关错误”错误(显然,这不是你的错;只是 JS Fiddle 被压低了,猜测.. .).
  • 我尝试使用 getComputedStyle... 不起作用

标签: jquery css jquery-isotope css-animations


【解决方案1】:

在选项集中itemPositionDataEnabled: true。然后你得到.data('isotope-item-position') 的值。见http://isotope.metafizzy.co/docs/options.html#itempositiondataenabled

.offset()getComputedStyle 将不起作用,因为 Isotope 使用 CSS3 转换进行定位。另一种解决方案是禁用转换,使用transformsEnabled: false

【讨论】:

  • 非常感谢@desandro 我不敢相信我在文档中错过了这一点,过去几周我一直在研究它们!是的,现在我将能够计算位置,这样我就可以显示一些与同位素项目相关的弹出框,然后我可以重新打开 css 动画:)
【解决方案2】:

你可以使用 jQuery 的 offset 函数,它会给你相对位置。如果您需要确切的位置,则可以获取容器元素的确切位置。因此,您的代码可能如下所示:

var off = $("div.element[data-symbol='Ca']").offset();
var containPos = $("#container").position();

var totalTop = off.top + containPos.top;
var totalLeft = off.left + containPos.left;

console.log(totalTop);
console.log(totalLeft);

【讨论】:

  • 对不起,你错了。偏移量是 top:0 和 left:0 签出证明jsfiddle.net/uQtur/3
  • 非常有趣 - 我在同位素页面上得到了积极的结果。抱歉提供了不好的信息!
  • 这种方法对我有用,诚然不是使用“同位素”,而是使用偏移和位置(用于计算谷歌地图单元位置)有效。谢谢
猜你喜欢
  • 2012-01-31
  • 1970-01-01
  • 2011-09-17
  • 2012-05-12
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多