jq版的九宫格拖拽换位置和随机位置(照片墙的拖拽换位置和随机位置)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

1、需求jquery.js库,
2、事件需要 click,mousedown,mousemove,mouseup,
3、碰撞检测,用循环检测每个li,如果碰撞返回当前li的下标,通过下标给li添加border
html、布局

<body>
    <div id="box">
        <ul>
            <li><img src="./img/0.jpg" alt=""></li>
            <li><img src="./img/1.jpg" alt=""></li>
            <li><img src="./img/2.jpg" alt=""></li>
            <li><img src="./img/3.jpg" alt=""></li>
            <li><img src="./img/4.jpg" alt=""></li>
            <li><img src="./img/5.jpg" alt=""></li>
            <li><img src="./img/6.jpg" alt=""></li>
            <li><img src="./img/7.jpg" alt=""></li>
            <li><img src="./img/8.jpg" alt=""></li>
        </ul>
    </div>
    <a href="jacascript:;">随机</a>
</body>

css样式

* {
            margin: 0;
            padding: 0;
            list-style: none;
            box-sizing: border-box;
        }
        #box {
            width: 660px;
            border: 1px solid grey;
            background: #eee;
            margin: 0 auto;
        }
        #box>ul {
            position: relative;
            width: 100%;
            height: 660px;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
            align-content: space-between;
        }
        #box>ul>li {
            width: 200px;
            height: 200px;
            background: red;
        }
        img {
            width: 100%;
            height: 100%;
        }
        a {
            position: absolute;
            top: 100px;
            left: 30px;
        }

js代码

<script>
        $(function () {
            var arr = [];
            var oRan = [];
            var flog = true;
            for (let i = 0; i < $('li').length; i++) {
                arr.push({
                    l: $('li').eq(i).position().left,
                    t: $('li').eq(i).position().top
                })
            }
            for (let j = 0; j < $('li').length; j++) {
                $('li').eq(j).css({
                    position: 'absolute',
                    left: arr[j].l + 'px',
                    top: arr[j].t + 'px'
                })
            }
            $('a').click(function(){
                oRan = [];
                while(oRan.length < arr.length){
                    let num = ren(0,arr.length);
                        if(oRan.indexOf(num)==-1){
                            oRan.push(num)
                        }
                }
                for(let i = 0; i < $('li').length;i++){
                    $('li').eq(oRan[i]).animate({left:arr[i].l,top:arr[i].t})
                }
            })
            var posi = {x:0,y:0}
            $('li').mousedown(function(ev){
                if(!flog) return;
                flog = false;
                this.x = ev.clientX - $(this).position().left;
                this.y = ev.clientY - $(this).position().top;
                posi.x = $(this).position().left;
                posi.y = $(this).position().top
                $(document).mousemove((event)=>{
                    $(this).css({
                        left:event.clientX - this.x +'px',
                        top:event.clientY - this.y +'px'
                    })
                    let _index = near($(this));
                    if(_index!=-1){
                        $('li').css('border','none')
                        $('li').eq(_index).css('border','2px solid red')
                    }else{
                        $('li').css('border','none')
                    }
                    event.preventDefault && event.preventDefault();
                })
                $(document).mouseup(()=>{
                    $(document).off('mousemove');
                    $(document).off('mouseup')
                    let _index = near($(this));
                    $('li').css('border','none')
                    if(_index != -1){
                        Commutator($(this),$('li').eq(_index),posi)
                        return;
                    }
                    $(this).animate({left:posi.x+'px',top:posi.y+'px'},function(){
                        flog = true;
                    })
                })
            })
            //  互换位置
                function Commutator(obj1,obj2,arr){
                    obj1.animate({left:obj2.position().left+'px',top:obj2.position().top+'px'})
                    obj2.animate({left:arr.x+'px',top:arr.y+'px'},function(){
                        flog = true;
                    })
                }
            //  循环检测碰撞
                function near(obj){
                    let _index = -1
                    for(let i = 0 ;i < $('li').length;i++){
                            if(obj.index()  != i ){
                                if(collision(obj,$('li').eq(i))){
                                    _index = i
                                }
                            }
                    }   
                    return _index;
                }
            // 碰撞检测
            function collision(obj1, obj2) {
                var L1 = obj1.position().left;
                var R1 = L1 + obj1.width();
                var T1 = obj1.position().top;
                var B1 = T1 + obj1.height();

                var L2 = obj2.position().left;
                var R2 = L2 + obj2.width();
                var T2 = obj2.position().top;
                var B2 = T2 + obj2.height();

                if (R2 < L1 || B2 < T1 || T2 > B1 || L2 > R1) {  // 未碰撞成功的几种情况
                    return false;
                } else {
                    return true;
                }
            }
            // 随机函数
            function ren(n, m) {
                return parseInt(Math.random() * (m - n) + n);
            }
        })
    </script>

全部代码

<!DOCTYPE html>
<html lang="en">

<head>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
            box-sizing: border-box;
        }
        #box {
            width: 660px;
            border: 1px solid grey;
            background: #eee;
            margin: 0 auto;
        }
        #box>ul {
            position: relative;
            width: 100%;
            height: 660px;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
            align-content: space-between;
        }
        #box>ul>li {
            width: 200px;
            height: 200px;
            background: red;
        }
        img {
            width: 100%;
            height: 100%;
        }
        a {
            position: absolute;
            top: 100px;
            left: 30px;
        }
    </style>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./js/jquery.js"></script>
    <script>
        $(function () {
            var arr = [];
            var oRan = [];
            var flog = true;
            for (let i = 0; i < $('li').length; i++) {
                arr.push({
                    l: $('li').eq(i).position().left,
                    t: $('li').eq(i).position().top
                })
            }
            for (let j = 0; j < $('li').length; j++) {
                $('li').eq(j).css({
                    position: 'absolute',
                    left: arr[j].l + 'px',
                    top: arr[j].t + 'px'
                })
            }
            $('a').click(function(){
                oRan = [];
                while(oRan.length < arr.length){
                    let num = ren(0,arr.length);
                        if(oRan.indexOf(num)==-1){
                            oRan.push(num)
                        }
                }
                for(let i = 0; i < $('li').length;i++){
                    $('li').eq(oRan[i]).animate({left:arr[i].l,top:arr[i].t})
                }
            })
            var posi = {x:0,y:0}
            $('li').mousedown(function(ev){
                if(!flog) return;
                flog = false;
                this.x = ev.clientX - $(this).position().left;
                this.y = ev.clientY - $(this).position().top;
                posi.x = $(this).position().left;
                posi.y = $(this).position().top
                $(document).mousemove((event)=>{
                    $(this).css({
                        left:event.clientX - this.x +'px',
                        top:event.clientY - this.y +'px'
                    })
                    let _index = near($(this));
                    if(_index!=-1){
                        $('li').css('border','none')
                        $('li').eq(_index).css('border','2px solid red')
                    }else{
                        $('li').css('border','none')
                    }
                    event.preventDefault && event.preventDefault();
                })
                $(document).mouseup(()=>{
                    $(document).off('mousemove');
                    $(document).off('mouseup')
                    let _index = near($(this));
                    $('li').css('border','none')
                    if(_index != -1){
                        Commutator($(this),$('li').eq(_index),posi)
                        return;
                    }
                    $(this).animate({left:posi.x+'px',top:posi.y+'px'},function(){
                        flog = true;
                    })
                })
            })
            //  互换位置
                function Commutator(obj1,obj2,arr){
                    obj1.animate({left:obj2.position().left+'px',top:obj2.position().top+'px'})
                    obj2.animate({left:arr.x+'px',top:arr.y+'px'},function(){
                        flog = true;
                    })
                }
            //  循环检测碰撞
                function near(obj){
                    let _index = -1
                    for(let i = 0 ;i < $('li').length;i++){
                            if(obj.index()  != i ){
                                if(collision(obj,$('li').eq(i))){
                                    _index = i
                                }
                            }
                    }   
                    return _index;
                }
            // 碰撞检测
            function collision(obj1, obj2) {
                var L1 = obj1.position().left;
                var R1 = L1 + obj1.width();
                var T1 = obj1.position().top;
                var B1 = T1 + obj1.height();

                var L2 = obj2.position().left;
                var R2 = L2 + obj2.width();
                var T2 = obj2.position().top;
                var B2 = T2 + obj2.height();

                if (R2 < L1 || B2 < T1 || T2 > B1 || L2 > R1) {  // 未碰撞成功的几种情况
                    return false;
                } else {
                    return true;
                }
            }
            // 随机函数
            function ren(n, m) {
                return parseInt(Math.random() * (m - n) + n);
            }
        })
    </script>
</head>

<body>
    <div id="box">
        <ul>
            <li><img src="./img/0.jpg" alt=""></li>
            <li><img src="./img/1.jpg" alt=""></li>
            <li><img src="./img/2.jpg" alt=""></li>
            <li><img src="./img/3.jpg" alt=""></li>
            <li><img src="./img/4.jpg" alt=""></li>
            <li><img src="./img/5.jpg" alt=""></li>
            <li><img src="./img/6.jpg" alt=""></li>
            <li><img src="./img/7.jpg" alt=""></li>
            <li><img src="./img/8.jpg" alt=""></li>
        </ul>
    </div>
    <a href="jacascript:;">随机</a>
</body>

</html>

本文章为个人所写,并非转载!

jQuery-----实现拖拽td单元格到其他上面,实现td内容交的源码分析 基于jQuery,实现td单元格的拖拽 &amp;lt;script type=&quot;text/javascript&quot; src=&quot;https://cdn.bootcss.com/jquery/1.9.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;style&amp;gt; td.hover{border:dotted 3 阅读详情

相关推荐

Jquery照片特效

免费资源 Jquery照片特效

jQuery基于gridster.js可拖动网格布局插件.zip

有兴趣刚需的可以自己下载,非常实用的jquery代码,可以完美运行,有能力的还可以二次修改!

jQuery点击图片菜单超酷马赛克照片缓冲运动效果

jQuery点击图片菜单超酷马赛克照片缓冲运动效果 jQuery点击图片菜单超酷马赛克照片缓冲运动效果

jquery+css3实现瀑布流照片特效特效代码

jquery+css3实现瀑布流照片特效是一款效果非常酷的照片作品,展示相片的效果非常大气。

使用jquery.fireworks,实现烟花、爱心照片、爱心跳动、随机照片,可以自定义文字描述

使用jquery.fireworks,实现烟花、爱心照片、爱心跳动、随机照片,可以自定义文字描述,适用于2.14,520,521情人节表白,最好有一定的html基础,图片需要替成你自己的,文字描述也替成你自己的,js,css,html全都是全的,下载下来就能使用。祝你示爱成功!

jQuery拖拽网格布局排序插件

下载地址 可以任意拖拽网格布局重新排序的jQuery插件,默认网格布局样式也很漂亮,类似win10的无规则布局样式。 dd:

ICode联盟 433

H5本地图片拖拽到网页指定位置框内

新建文件drap_and_drop.html, 代码如下: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head lang="en"&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;&lt;/title&gt; &lt;style&gt; #containe

lian772882的博客 5654

实现网页中鼠标拖动图片指定框中移动

实现网页中鼠标拖动图片指定框中移动   简单实现鼠标拖动图片指定框内移动,使用时只需要修改html文件中对style、script、img三个的引用路径。(img自己找个图片便可) 目录实现网页中鼠标拖动图片指定框中移动一、代码展示与解析1.1 css文件1.2 js文件1.3 html文件 一、代码展示与解析 1.1 css文件   此处图片移动的边界div用内联样式的是为了能够在js中通过obj.style.top、obj.style.left、obj.style.height、obj.style

qq_47780707的博客 2972

html拖动图片指定位置,HTML5JS将多个图像拖放到特定位置

我尝试拥有2个可拖动的图像2个目标位置,但我希望image1只能放在位置1,而image2只能够被放置在位置2中,该代码允许将图像放置在任一位置。HTML5JS将多个图像拖放到特定位置(我已经离开了文档类型,头部,身体等标签读取简单)CSS#div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}#div2 {w...

weixin_28835583的博客 1355

原生JS写九宫格图片拖拽代码实例

&lt;!doctype html&gt; &lt;html lang='en'&gt; &lt;meta charset='utf-8'&gt; &lt;head&gt; &lt;style type="text/css"&gt; body,ul{ margin:0; } ul{ position:relative; padding-...

qiufengwuxiu的博客 1393

js+flash+xml实现3D照片特效

此js特效是一款由flash+xml实现3D照片,效果非常炫,可以上下左右4个方向旋转,带分页,有声音,点击图片可以放大,可以查看详细介绍与链接,由于资源图片比较多,为了方便演示,所有的图片只用一张,大家用的时候只改XML里面的配置就可以了,非常简单。 XML配置结构如下: 1 tiltviewergallery>

binyao02123202的专栏 2633

jsp图片_JS实现的非常漂亮的3D立体照片显示效果

【实例简介】JS实现的非常漂亮的3D立体照片显示效果【实例截图】【核心代码】JS实现的非常漂亮的3D立体照片显示效果└── 3D立体照片├── images│ ├── 0e85d4fe6d.jpg│ ├── 1ef7ea6559.jpg│ ├── 200ff06c0e.jpg│ ├── 46eae50db6.jpg│ ├── 5b0b0c8119.jpg│ ├── 6...

weixin_36478447的博客 933

html九宫格排列图片,10款jQuery实现的360浏览器九宫格图片拖拽排序

1.jQuery实现的带左右箭头宽屏幻灯片特效这是一款基于jQuery实现的带左右箭头宽屏幻灯片特效源码,是一款基于jquery.divas插件实现的网站宽屏幻灯片切代码。通过左右箭头切图片的时候会出现多层浮动显示的层叠效果。且画面切流畅自然,是一款非常优秀的特效源码。2.jQuery实现的全屏3D旋转木马焦点图特效这是一款基于jQuery实现的全屏3D旋转木马焦点图特效源码,带左右箭头、带...

weixin_31488273的博客 658

jquery实现可拖拽布局

前端实现可拖拽布局Jquery

来一颗砂糖橘 2万+

jquery可自由拖拽div布局类似win10系统的无规则拖拽布局

&lt;!doctype html&gt; &lt;html class="no-js" lang="en"&gt; &lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt; &lt;meta http-equiv="X-UA-Com

qq_36900615的博客 1317

jQuery插件实现图片小案例

你想写出绚丽多彩的图片吗?想的话就来一起看一下接下来的内容吧 接下来就让我们使用两个简单的插件来实现图片小案例吧。编写之前需要提前下载lazyload懒加载插件masonry瀑布流式布局插件。(百度可以搜到呦!) 1、使用的核心方法 ​ a. 懒加载插件 – lazyload()方法 ​ b.瀑布流插件 – masonry()方法 2、核心问题 必须保证所有图片延迟加载完毕后,才能实现瀑布流效果。 解决这个问题可以使用load方法,等懒加载图片加载完毕后,实现瀑布流效果。 具体实现代码如下: &lt

qq_49002903的博客 1164

原生JS 表格列拖拽 适用JqGrid

页面引用js就不用多说了,在class添加。不是JqGrid可以注释这个。

weixin_43205308的博客 705

html可拖动布局,jQuery响应式可拖拽的元素组件网格布局插件

gridstack.js是一款响应式可拖拽的元素组件网格布局jQuery插件。该jQuery插件允许你创建给予Bootstarp v3的响应式可拖拽的网格布局界面,可以用于制作可拖拽的多列网格布局。并且它还可以支持触摸屏设备。外部依赖gridstack.js依赖下面的js库文件:lodash.js(>= 3.5.0)jQuery(>= 1.11.0)jQuery UI。组件的最小需求:...

weixin_33925615的博客 1065

JQuery 拖拽元素,并移动其他元素位置

JQuery 拖拽元素,并移动其他元素位置 &amp;lt;!DOCTYPE html&amp;gt; &amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt; &amp;lt;title&amp;gt;拖动元素,并移动其他元素&amp;lt;/title&amp

zhang_g_b_930830的博客 3144
上一篇: react脚手架写百度搜索框全部功能
下一篇: 原生js写轮播图分块运动 JavaScript的技巧
Absolon_
博客等级 码龄8年 3粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值