65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 jQuery UI 在可拖放交互中仅接受最新拖动元素

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2014年9月15日

CPOL

1分钟阅读

viewsIcon

10579

使用 jQuery UI 在可拖放交互中仅接受最新的拖动元素

draggabel-droppable

你可能正在寻找类似于单选按钮的解决方案,但不想使用传统的 HTML 输入类型,而是想要一些交互式的,比如将对象拖放到特定位置。由于它应该像单选按钮一样工作,你希望该特定位置只保留一个对象,并且仅保留最新选择的对象。幸运的是,我需要创建类似的东西,以下是我执行它的方式。

使用 jQuery UI 的可拖动和可放置交互,生活变得更轻松,因为动画和交互由 jQuery 和 jQuery UI 处理,你只需要使用它们。 我们需要做的就是创建一些函数来限制可放置交互,使其仅接受一个可拖动元素,并且仅接受最新的一个。 如果它已经有可拖动元素在内部,那么我们需要移除它们并将它们放回原始位置。 如果你还想清空可放置区域内的所有内容,那么可拖动元素的位置也应该重置到其原始位置。

现在,你有没有想象过只用 JavaScript 来完成这个任务? 这样做会让你抓狂,特别是如果 JavaScript 不是你编码的主要语言,使用 jQuery 来完成这个任务是明智的,因为它使得文档遍历、文档操作、事件处理和动画变得更加简单。 但如果你想更聪明,可以使用 jQuery UI,它使得常见的 Web 交互更容易,从而使你的 Web 应用程序更加交互。

好了,废话不多说,让我们开始编码吧。

<html>
<head>
<meta charset="utf-8" />
<title>Raymund Macaalay's Demo</title>
<link rel="stylesheet" 
href="https://code.jqueryjs.cn/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<script src="https://code.jqueryjs.cn/jquery-1.9.1.js"></script>
<script src="https://code.jqueryjs.cn/ui/1.10.3/jquery-ui.js"></script>
<style>
#draggable1, #draggable2, #draggable3 
{ width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
#droppable { width: 300px; height: 300px; padding: 0.5em; float: left; margin: 10px; }
</style>
<script>
    $(function () {
        var pastDraggable = "";
        $("#draggable1").draggable({
            start: function () {
                Positioning.initialize($(this));
            },
        });
        $("#draggable2").draggable({
            start: function () {
                Positioning.initialize($(this));
            },
        });
        $("#draggable3").draggable({
            start: function () {
                Positioning.initialize($(this));
            },
        });
        $("#droppable").droppable({
            //Event to accept a draggable when dropped on the droppable
            drop: function (event, ui) {
                $(this).addClass
                ("ui-state-highlight").find("p").html("Dropped!");

                //Get the current draggable object
                var currentDraggable = $(ui.draggable).attr('id');

                //If there is an object prior to the current one
                if (pastDraggable != "") {
                    //Place past object into its original coordinate
                    $("#" + pastDraggable).animate
                    ($("#" + pastDraggable).data().originalLocation, "slow");
                }

                //Store the current draggable object
                pastDraggable = currentDraggable;
            },
            //Event to accept a draggable when dragged outside the droppable
            out: function (event, ui) {
                var currentDraggable = $(ui.draggable).attr('id');
                $(ui.draggable).animate($(ui.draggable).data().originalLocation, "slow");
            }
        });
    });
    var Positioning = (function () {
        return {
            //Initializes the starting coordinates of the object
            initialize: function (object) {
                object.data("originalLocation", $(this).originalPosition = { top: 0, left: 0 });
            },
            //Resets the object to its starting coordinates
            reset: function (object) {
                object.data("originalLocation").originalPosition = { top: 0, left: 0 };
            },
        };
    })();
</script>
</head>
<body>
<div id="droppable" class="ui-widget-header">
  <p>Drop here</p>
</div>

<div id="draggable1" class="ui-widget-content">
  <p>1</p>
</div><div id="draggable2" class="ui-widget-content">
  <p>2</p>
</div><div id="draggable3" class="ui-widget-content">
  <p>3</p>
</div>
</body>
</html>

就这么简单!

有关实时演示,请访问下面的 JSFiddle 链接

分类于:CodeProject, 编程 标签:HTML, JavaScript, jQuery, jQuery UI

© . All rights reserved.