zoukankan      html  css  js  c++  java
  • Jquery 多行拖拽图片排序 jq优化

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>jQuery图片拖动排序代码</title>
    
    <style type="text/css">
    
    .item_container{position:relative;height:auto;overflow:hidden;}
    .item_content ul{list-style:none;padding:0;margin:0;}
    .item_content ul li{width:200px;height:160px;float:left;margin:10px }
    .item_content{width:50%;height:auto;border:1px solid #ccc;float:left;}
    .item_content .item{width:200px;height:120px;line-height:120px;text-align:center;cursor:pointer;background:#ccc;}
    .item_content .item img{width:200px;height:120px;border-radius:6px;}
    .close{display:block;width:20px;height:20px;top:0;right:0;z-index:9999;position:absolute;text-align:center;font-size:16px;cursor:pointer;color:aliceblue;}
    </style>
    
    </head>
    <body>
    <div class="item_container">
        <div class="item_content" id="imageChange">
            <ul>
                <li>
                    <div class="item"> <img src="img/500x500-1.png" width="150" height="150"> 
                     </div>
                </li>
                <li>
                    <div class="item"> <img src="img/500x500-2.png" width="150" height="150"> 
                     </div>
                </li>
                <li>
                    <div class="item"> <img src="img/500x500-3.png" width="150" height="150"> 
                     </div>
                </li>
                <li>
                    <div class="item"> <img src="img/500x500-4.png" width="150" height="150"> 
                     </div>
                </li>
                <li>
                    <div class="item"> <img src="img/500x500-5.png" width="150" height="150"> 
                     </div>
                </li>
                <li>
                    <div class="item"> <img src="img/500x500-6.png" width="150" height="150"> 
                     </div>
                </li>
                <li>
                    <div class="item"> <img src="img/500x500-7.png" width="150" height="150"> 
                     </div>
                </li>
            </ul>
        </div>
    </div>
    <script src="js/jquery-1.8.3.min.js"></script>
    <script>
    $(function () {
        function Pointer(x, y) {
            this.x = x;
            this.y = y;
        }
        function Position(left, top) {
            this.left = left;
            this.top = top;
        }
    
        $(".item_container .item").each(function (i) {  
            this.init = function () { // 初始化
                this.box = $(this).parent();
                $(this).attr("index", i).css({
                    position: "absolute",
                    left: this.box.position().left,
                    top: this.box.position().top,
                    cursor: "move"
                }).appendTo(".item_container");
                this.drag();
            },
                this.move = function (callback) {  // 移动
                    $(this).stop(true).animate({
                        left: this.box.position().left,//相对父级的距离
                        top: this.box.position().top
                    }, 500, function () {
                        if (callback) {
                            callback.call(this);
                        }
                    });
                },
                this.collisionCheck = function () {
                    var currentItem = this;
                    var direction = null;
    
                    $(this).siblings(".item").each(function () {
                        if (
                            currentItem.pointer.x > this.box.offset().left &&
                            currentItem.pointer.y > this.box.offset().top &&
                            (currentItem.pointer.x < this.box.offset().left + this.box.width()) &&
                            (currentItem.pointer.y < this.box.offset().top + this.box.height())
                        ) {
                            // 返回对象和方向
                            if (currentItem.box.position().top < this.box.position().top) {
                                direction = "down";
                            } else if (currentItem.box.position().top > this.box.position().top) {
                                direction = "up";
                            } else {
                                direction = "normal";
                            }
                            this.swap(currentItem, direction);
                        }
                    });
                },
                this.swap = function (currentItem, direction) { // 交换位置
                    if (this.moveing) return false;
                    var directions = {
                        normal: function () {
                            var saveBox = this.box;
                            this.box = currentItem.box;
                            currentItem.box = saveBox;
                            this.move();
                            $(this).attr("index", this.box.index());
                            $(currentItem).attr("index", currentItem.box.index());
                        },
                        down: function () {
                            // 移到上方
                            var box = this.box;
                            var node = this;
                            var startIndex = currentItem.box.index();
                            var endIndex = node.box.index();;
                            for (var i = endIndex; i > startIndex; i--) {
                                var prevNode = $(".item_container .item[index=" + (i - 1) + "]")[0];
                                node.box = prevNode.box;
                                $(node).attr("index", node.box.index());
                                node.move();
                                node = prevNode;
                            }
                            currentItem.box = box;
                            $(currentItem).attr("index", box.index());
                        },
                        up: function () {
                            // 移到上方
                            var box = this.box;
                            var node = this;
                            var startIndex = node.box.index();
                            var endIndex = currentItem.box.index();;
                            for (var i = startIndex; i < endIndex; i++) {
                                var nextNode = $(".item_container .item[index=" + (i + 1) + "]")[0];
                                node.box = nextNode.box;
                                $(node).attr("index", node.box.index());
                                node.move();
                                node = nextNode;
                            }
                            currentItem.box = box;
                            $(currentItem).attr("index", box.index());
                        }
                    }
                    directions[direction].call(this);
                },
                this.drag = function () { // 拖拽
                    var oldPosition = new Position();
                    var oldPointer = new Pointer();
                    var isDrag = false;
                    var currentItem = null;
                    $(this).mousedown(function (e) {
                        e.preventDefault();
                        oldPosition.left = $(this).position().left;
                        oldPosition.top = $(this).position().top;
                        oldPointer.x = e.clientX;
                        oldPointer.y = e.clientY;
                        isDrag = true;
    
                        currentItem = this;
    
                    });
                    $(document).mousemove(function (e) {
                        var currentPointer = new Pointer(e.clientX, e.clientY);
                        if (!isDrag) return false;
                        $(currentItem).css({
                            "opacity": "0.8",
                            "z-index": 999
                        });
                        var left = currentPointer.x - oldPointer.x + oldPosition.left;
                        var top = currentPointer.y - oldPointer.y + oldPosition.top;
                        $(currentItem).css({
                            left: left,
                            top: top
                        });
                        currentItem.pointer = currentPointer;
                        // 开始交换位置
    
                        currentItem.collisionCheck();
    
    
                    });
                    $(document).mouseup(function () {
                        if (!isDrag) return false;
                        isDrag = false;
                        currentItem.move(function () {
                            $(this).css({
                                "opacity": "1",
                                "z-index": 0
                            });
                        });
                    });
                }
            this.init();
        });
    });
    
    </script>
    
    </body>
    </html>
  • 相关阅读:
    20165322 第九周 实现mypwd
    20165322 第七周 mybash 的实现
    2018-2019-1 20165322 实验三 实时系统
    2018-2019-1 20165318 20165322 20165326 实验二 固件程序设计
    2018-2019-1 20165322 《信息安全系统设计基础》第六周学习总结
    codeblocks汉化
    2019-2020-1 20175334 实验五 《通讯协议设计》实验报告
    2019-2020-1 20175334 20175322 20175315 实验四 外设驱动程序设计
    2019-2020-1 20175315 20175322 20175334 实验三 实时系统
    2019-2020-1 20175334 20175322 20175315 实验二 固件程序设计
  • 原文地址:https://www.cnblogs.com/yi-miao/p/9269776.html
Copyright © 2011-2022 走看看