如何使用 .draggable() 操作 div、滑块以及使用 JqueryUI 的文本输入

问题描述 投票:0回答:1

我有一个圆形 div,它沿着较大的矩形 div 移动。我现在可以使用 .dragable() 移动它。我还需要能够使用带有输入框的滑块移动圆圈。输入框还应显示圆的当前位置。我认为这需要获取圆的当前位置,但我不知道从哪里开始。

这是我到目前为止所拥有的:

<body>
    <div class="container-fluid" id="graphBox">

        <div id="graphBack">
            <div id="head" class="ui-widget-content"></div>
        </div>

        <div class="border" id="vertSliderBox">
            <label class="slider-label" for="verticalSlider">Vertical Position:</label>
            <div id="verticalSlider" class="slider"></div>
            <input type="number" class="slider-input" id="verticalInput">
        </div>

    </div>

    <div class="container-fluid border">
        <label class="slider-label" for="horizontalSlider">Horizontal Position:</label>
        <div id="horizontalSlider" class="slider"></div>
        <input type="number" class="slider-input" id="horizontalInput">
    </div>

    <script>

        $(function () {

            $("#head").draggable({
                containment: "#graphBack"
            });

            $("#horizontalSlider").slider({
                range: "min",
                value: 0,
                min: -70,
                max: 70,
                slide: function (event, ui) {
                    $("#head").css("left", ui.value + "px");
                    $("#horizontalInput").val(ui.value);
                }
            });

            $("#horizontalInput").on("change", function () {
                var value = 0;
                var value = $(this).val();
                $("#head").css("left", value + "px");
                $("#horizontalSlider").slider("value", value);
            });

            $("#verticalSlider").slider({
                orientation: "vertical",
                range: "min",
                value: 20,
                min: 0,
                max: 40,
                slide: function (event, ui) {
                    $("#head").css("top", ui.value + "px");
                    $("#verticalInput").val(ui.value);
                }
            });

            $("#verticalInput").on("change", function () {
                var value = 20;
                var value = $(this).val();
                $("#head").css("top", value + "px");
                $("#verticalSlider").slider("value", value);
            });
        });
    </script>

</body>
javascript html jquery css jquery-ui
1个回答
0
投票

您现有的代码看起来是一个很好的开始!当您移动滑块时,您确实获得了圆的当前位置。您已设置滑块和输入来控制圆形 div 的水平和垂直位置。

代码中缺少的一件事是当通过拖动直接移动圆形 div 时更新滑块和输入的方法。您需要在可拖动函数中添加一些逻辑,以根据 div 的当前位置更新滑块和输入。

您可以通过在draggable方法中添加拖动事件来做到这一点,如下所示:

    $("#head").draggable({
        containment: "#graphBack",
        drag: function(event, ui) {
            var leftPosition = ui.position.left;
            var topPosition = ui.position.top;
            
            // Update the horizontal slider and input
            $("#horizontalSlider").slider("value", leftPosition);
            $("#horizontalInput").val(leftPosition);
            
            // Update the vertical slider and input
            $("#verticalSlider").slider("value", topPosition);
            $("#verticalInput").val(topPosition);
        }
    });

确保滑块的最小值和最大值与#graphBack容器的边界相匹配,否则您可能会发现滑块无法准确表示#head div的位置。

最后,您需要设置 #head div 的样式,使其呈圆形,并为 #graphBack 容器提供一定的大小,以便容器正常工作。你可以使用 CSS 来做到这一点,如下所示:

#graphBack {
    width: 140px; /* Adjust as needed */
    height: 40px; /* Adjust as needed */
    position: relative;
    border: 1px solid #000;
}

#head {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background-color: #000;
    position: absolute;
}

应调整这些值以适合您的布局。确保滑块的最小值和最大值与这些尺寸定义的边界相匹配。

© www.soinside.com 2019 - 2024. All rights reserved.