javascript - 如何在 gridstack.js 中获取新的 y 值

标签 javascript gridstack

我正在使用Gridstack对于可拖动的 div。 如何获取 data-gs-y 的新值(以便 div 被放置到哪个 y 轴)。 实际上我尝试过这个:

<div class="row">
    <div class="col-12">
        <div class="card">
            <div class="card-body">
                <div class="grid-stack" data-gs-width="12" data-gs-animate="yes">
                    <div class="grid-stack-item" data-gs-x="0" data-gs-y="0" data-gs-width="12" data-gs-height="1" data-gs-id="facebook">
                        <div class="grid-stack-item-content">facebook</div>
                    </div>
                    <div class="grid-stack-item" data-gs-x="0" data-gs-y="1" data-gs-width="12" data-gs-height="1" data-gs-id="workbook">
                        <div class="grid-stack-item-content">workbook</div>
                    </div>
                    <div class="grid-stack-item" data-gs-x="0" data-gs-y="2" data-gs-width="12" data-gs-height="1" data-gs-id="pictures">
                        <div class="grid-stack-item-content">pictures</div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<script type="text/javascript">
    $(function () {
        $('.grid-stack').gridstack({
            disableResize: true,
            removable: true
        });
    });

    $('.grid-stack').on('dragstop', function(event, ui) {
            var element = event.target;
            var id = $(element).attr('data-gs-id');
            var y = $(element).attr('data-gs-y');
            alert(id + y);
        });

    $('.grid-stack').on('dropped', function (event, previousWidget, newWidget) {
        alert('dropped'); // It's not thrown
    });

    $('.grid-stack').on('change', function(event, items) {
        var element = items[0].el[0];
        var id = $(element).attr('data-gs-id');
        var y = $(element).attr('data-gs-y');
        alert(id + y);
    });
</script>

因此,事件 Dragstop 和 Change 给了我 y 轴的当前/旧值,并且不会抛出 drop 事件。

如何获取 y 轴的新值?

最佳答案

我认为您可以使用“突变观察者”来监听每个 div 元素上属性“data-gs-y”的更改。我编写了以下代码并在此演示 http://gridstackjs.com/demo/knockout.html 上进行了验证

var divs = document.querySelectorAll(".grid-stack-item");
var dragging = false;
divs.forEach(function(div){
 const observer = new MutationObserver((mutations) => { 
   mutations.forEach((mutation) => {
     if(!dragging){
       alert("new y-value " + div.getAttribute("data-gs-y"));
     }
   });
 });
observer.observe(div, { attributes: true, attributeFilter: ['data-gs-y'] });

div.onmousedown = function(){ dragging = true;}
div.onmouseup = function(){ dragging = false;}   
});

关于javascript - 如何在 gridstack.js 中获取新的 y 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55507030/

相关文章:

javascript - 使用 Underscore.js、jQuery 和 jQueryUI 在 RequireJS 中无法正确加载 Gridstack.js

javascript - 使用 jquery/Javascript 拆分单选按钮值

javascript - foreach循环的每次迭代之间的延迟?

javascript - 不正确地返回 true

angular - 没有任何声明模块的类型文件是否有意义?

javascript - Gridstack:将小部件从一个网格拖到另一个嵌套的网格中

javascript - GridStack JS 设置网格框的顺序

javascript - gridstack.js - 保持纵横比

javascript - 使用模动态添加 Bootstrap 行

javascript - 使用 HTML 按钮执行 PHP 和 SQL