【问题标题】:Get the positions of multiple elements获取多个元素的位置
【发布时间】:2013-04-20 22:42:41
【问题描述】:

我正在尝试使用 jQuery 的 .position 和 .each 函数获取多个可拖动元素的各个位置。

这就是我目前所拥有的......

JS

function newAppDraggable() {
    $('.App').draggable({
        containment: "#AppBox",
        grid: [ 60, 60 ],
        stack: ".App"
    });
};

$(function() {
    $('.AppList').droppable({
        accept: ".App",
        tolerance: 'fit',
        drop: function(event, ui) {
            $(".App").each(function( index ) {
            var position = $(this).position();
            var posTop = position.top;
            var posLeft = position.left;
            $( "#posThis" ).html(index+":"+posTop+":"+posLeft);
            });
        }
    });
});

HTML

<div class="AppList">
    <div id="TimenDate" class="App Fixed Size110x350">
    </div>

    <div id="User" class="App Fixed Size110x290">
    <p id="posThis"></p>
    </div>

    <div id="Weather" class="App Fixed Size110x350">
    </div>
</div>

这里是fiddle 以获得更好的解释。在小提琴上,索引保持在 2 并且位置仅在移动第三个应用程序时发生变化。

我想要的是能够获取所有单个应用程序的位置,并可能将它们保存在 cookie 中的数组中(或类似的东西),以便我可以在页面时将它们重新加载到它们的最后位置已刷新。

【问题讨论】:

    标签: javascript jquery position draggable each


    【解决方案1】:

    在原生 javascript 和支持 element.getBoundingClientRect 的现代浏览器中

    以下两个示例都经过修改,以演示如何将每个元素的获得位置添加到稍后可以访问的数组中。

    您可以使用此技术获取位置信息。

    var apps = document.querySelectorAll(".App"),
        positions = [];
    
    Array.prototype.forEach.call(apps, function (app, index) {
        var positionInfo = app.getBoundingClientRect();
    
        positions.push(positionInfo);
        console.log(index + ":" + positionInfo.top + ":" + positionInfo.left);
    });
    
    console.log(positions);
    

    开启jsfiddle

    在上面的例子中,浏览器还必须支持Array.forEachdocument.querySelectorAll

    使用 jquery 会是这样,使用jQuery selectorsjQuery.eachjQuery.position

    var apps = $(".App"),
        positions = [];
    
    $.each(apps, function (index, app) {
        var positionInfo = $(app).position();
    
        positions.push(positionInfo);
        console.log(index + ":" + positionInfo.top + ":" + positionInfo.left);
    });
    
    console.log(positions);
    

    jsfiddle

    【讨论】:

    • 所以这在 jQuery 上不起作用?我所有的脚本都在 jQuery Plus 中,我使用的所有插件。我不认为我现在有能力改变一切。感谢您的意见
    • 为什么要从jquery改过来(jquery是一个javascript库,一组用javascript编写的例程,供用户在javascript中使用)?
    • 哦,对不起,我误解了你所说的香草脚本的意思。那么我将如何用我现有的代码来实现呢?
    • 没关系,我看到你已经添加了 jquery 代码 :) 我已经更改了你的脚本,将位置放在

      标记中,我得到了相同的结果。它唯一获得第三个应用程序jsfiddle.net/Xotic750/4nv62

      的位置
    • 现在您已将其改回 .App 我得到了与之前相同的结果,索引为 2,位置为第三个应用程序的位置jsfiddle.net/strydom/4nv62/5
    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多