九宫格拖拽与互换

以上是一个九宫格,要想实现元素的拖拽和互换,如点击A到E的位置是,A会拖拽到E的位置,E会自动返回到A的位置;代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>九宫格拖拽与交换</title>
</head>
<style type="text/css">
    #content{width: 300px;height:300px;margin: 0 auto;position: relative;}
    #content div{width: 100px;height: 100px; float: left;line-height: 100px;text-align: center;font-size:40px; font-weight: 900; color: black; cursor: pointer; position: absolute;}
    #content div:nth-child(1){background-color: #f05b72; top:0; left: 0;border: 1px solid;border-radius: 20px; }
    #content div:nth-child(2){ background-color: #faa755; top:0; left:100px;border: 1px solid;border-radius: 20px;}
    #content div:nth-child(3){background-color: #2585a6; top:0; left: 200px;border: 1px solid;border-radius: 20px;}
    #content div:nth-child(4){background:#5ce4fd; top:100px;left: 0;border: 1px solid;border-radius: 20px; }
    #content div:nth-child(5){ background:#f61acf; top:100px;left: 100px;border: 1px solid;border-radius: 20px; }
    #content div:nth-child(6){ background:#3ef9bd; top:100px; left: 200px;border: 1px solid;border-radius: 20px; }
    #content div:nth-child(7){ background:#9af93e;top:200px; left: 0;border: 1px solid;border-radius: 20px;}
    #content div:nth-child(8){background:#eef93e; top:200px;left: 100px;border: 1px solid;border-radius: 20px; }
    #content div:nth-child(9){ background:#f9843e; top:200px; left:200px;border: 1px solid;border-radius: 20px; }
    #content .draging{ position: absolute;}
</style>
<body>
<div id="content">
    <div>A</div>
    <div>B</div>
    <div>C</div>
    <div>D</div>
    <div>E</div>
    <div>F</div>
    <div>G</div>
    <div>H</div>
    <div>I</div>
</div>
<script type="text/javascript">
    var content = document.getElementById(‘content‘);
    var items = content.querySelectorAll(‘div‘);
    console.log(items);
    function itemBox(itemName){
        itemName.onmousedown = function(evt1){
            var e = evt1 || window.event;
            var cloneDiv = document.createElement(‘div‘);
            cloneDiv.innerHTML = itemName.innerHTML;
            cloneDiv.style.backgroundColor = getComputedStyle(itemName).backgroundColor;
            cloneDiv.className = ‘draging‘;
            cloneDiv.style.top = itemName.offsetTop +‘px‘;
            cloneDiv.style.left = itemName.offsetLeft+‘px‘
            content.appendChild(cloneDiv);
            var offsetX = evt1.pageX - cloneDiv.offsetLeft;
            var offsetY = evt1.pageY - cloneDiv.offsetTop;
            document.onmousemove = function(evt){
                var e2 = evt || window.event;
                cloneDiv.style.left = evt.pageX - offsetX +‘px‘;
                cloneDiv.style.top = evt.pageY -offsetY+‘px‘
            }
            document.onmouseup = function(){
                document.onmousemove = null;
                var divs = content.getElementsByTagName(‘div‘);
                console.log(divs.length)
                var min = 800;
                var minDiv = null;
                for(var i=0;i<divs.length-1;i++){
                    var div = divs[i];
                    var dis = distance(cloneDiv,div);
                    if(dis <= min){
                        min = dis;
                        minDiv = div;
                    }
                }
                var tmpInnerHTMl = minDiv.innerHTML;
                minDiv.innerHTML = itemName.innerHTML;
                itemName.innerHTML = tmpInnerHTMl;
                var tmpColor = getComputedStyle(minDiv).backgroundColor;
                minDiv.style.backgroundColor = getComputedStyle(itemName).backgroundColor;
                itemName.style.backgroundColor = tmpColor;
                content.removeChild(cloneDiv)
                document.onmouseup = null;
            }
            return false;
        }
    }
    for(var i = 0; i < items.length; i++){
        itemBox(items[i]);
    }
    function distance(div1,div2) {
        var a = div1.offsetLeft - div2.offsetLeft;
        var b = div1.offsetTop - div2.offsetTop;
        var c = Math.sqrt(a*a+b*b);
        return c;
    }
</script>
</body>
</html>

原文地址:https://www.cnblogs.com/CH-cnblogs/p/11481820.html

时间: 2024-11-08 08:27:04

九宫格拖拽与互换的相关文章

【原创】js实现一个可随意拖拽排序的菜单导航栏

1.想做这个效果的原因主要是用在UC上看新闻发现他们的导航菜单很有趣.无聊的时候在哪划着玩了很久.所以就干脆自己写一个.原效果如下 2.整体效果如下,在已推荐和未添加里面每个小方块可以触摸移动位置互换.未添加和已添加里面的小方块位置可以拖放. 3.结构分析.整体结构用红线框标出.可以分为三个部分.关注底部拖拽部分.一个div里面嵌套两个div.定位关系如图.本次教程之作一个拖拽框 1.好了,基本情况已经分析清楚先实现页面样式. <div class="wrap"> <

RecyclerView实现条目Item拖拽排序与滑动删除

RecyclerView实现条目Item拖拽排序与滑动删除 版权声明:转载请注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 效果演示 直播视频讲解:[http://pan.baidu.com/s/1miEOtwG1 推荐大家结合我直播的视频看效果更好. 本博客源码传送门. 需求和技术分析 RecyclerView Item拖拽排序::长按RecyclerView的Item或者触摸Item的某个按钮. RecyclerView Item滑动删除:

Qt 无边框拖拽实现

头文件定义: ------------------------------------------------------------------ class TDragProxy:public QObject{ Q_OBJECT public:    TDragProxy(QWidget* parent);     ~TDragProxy(); protected:     enum WidgetRegion     {         Top = 0,         TopRight,  

控件拖拽置换位置

简单的一个控件拖拽交换位置Demo,有些场景下会用到,关于此类功能网上有很多例子,而且Google官方API中也有相应的接口,对这种业务需求进行了一定逻辑封装.这里没有采用官方接口,单纯的从触摸事件入手来简单的实现控件位置交换. 写代码之前先理清楚实现的思路,这里从控件的触摸事件入手,触摸事件有ACTION_DOWN.ACTION_MOVE.ACTION_UP这几个状态,下面先把实现逻辑的思路写出来: 1.界面加载完成后用一个List记录各个子控件相对于父控件的坐标,同时将这些子控件放入一个Li

Android DragAndDrop API 拖拽效果 交换ListView的Item值

前言 Android系统自API Level11开始添加了关于控件拖拽的相关API,可以方便的实现控件的一些拖拽效果,而且比自己用Touch事件写的效果更好.下面就来看下DragAndDrop吧. 使用Android的DragAndDrop框架,我们可以方便的在当前布局中用拖拽的形式实现两个View之间数据的互换.DragAndDrop框架包括一个拖拽事件的类,拖拽监听器,以及一些帮助方法和类. 尽管DragAndDrop主要是为了数据移动而设计,但是我们也可用他做别的UI处理.举个例子,我们可

WPF中元素拖拽的两个实例

原文:WPF中元素拖拽的两个实例 今天结合之前做过的一些拖拽的例子来对这个方面进行一些总结,这里主要用两个例子来说明在WPF中如何使用拖拽进行操作,元素拖拽是一个常见的操作,第一个拖拽的例子是将ListBox中的子元素拖拽到ListView的某一个节点,从而将该子元素作为当前节点的子节点.第二个例子就是将ListView的某一项拖拽到另外一项上从而使两个子项位置互换,这两个例子的原理类似,实现细节上有所差别,下面就具体分析一下这些细节. DEMO1 一 示例截图 图一 示例一截图 二 重点原理分

拖拽原理以及代码实现

拖拽功能主要是用在让用户做一些自定义的动作,比如拖动排序,弹出框拖动移动等等:挺好玩儿.下面分享一下拖拽的原理,和码友们一起学习! 拖拽流程: 1)事件:onmousedown:onmousemove:onmouseup: 2)实现原理分析: 拖拽是通过获取鼠标移动的距离来实现的,即计算移动前的位置的坐标(x,y)与移动中的位置的坐标(x,y)差值.当onmousedown或onmousemove时,都可以获取到当前鼠标的位置,即移动前的坐标值与移动中的坐标值.参考如下图: 如上图所示: 在on

Qt之QAbstractItemView视图项拖拽(二)

一.需求说明 上一篇文章Qt之QAbstractItemView视图项拖拽(一)讲述了实现QAbstractItemView视图项拖拽的一种方式,是基于QDrag实现的,这个类是qt自己封装好了的,所以可定制性也就没有了那么强,最明显的是,这个类在执行exec方法后,mouse系列的回调接口就被阻塞了,随之而来的问题就是拖拽时item项没有了hover特性,为了解决这个问题,我们就不能使用QDrag类来实现拖拽了,这也是这篇文章我要讲述的内容. 二.效果展示 如图1是demo的效果展示,比较丑,

JAVA UI 拖拽功能

java GUI拖拽功能是很实用也相对高级一些的功能. 有一小部分的GUI控件支持他们有dragEnabled属性.这些JComponent包括:javax.swing.JColorChooserjavax.swing.JFileChooserjavax.swing.JListjavax.swing.JTablejavax.swing.JTreejavax.swing.text.JTextComponent 大部分的控件不支持没有这个属性,尤其是常用的jpanel和jframe. 一种简单的方法