拖拽碰撞最后一个问题了,就是拖拽之后,点击会变回去,不知道为何

<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>可拖拽的照片墙</title>
<style type="text/css">
html body {
    margin:0;
}
#wrap {
    list-style:none;
    padding:0;
    margin:30px auto;
    width:670px;
    position:relative;
    zoom:1;
}
.clearfix:after {
    content:‘‘;
    height:0;
    clear:both;
    display:block;
    visibility:hidden;
}
#wrap div{
    float:left;
    margin:10px;
    z-index:1;
    border:1px solid #fff;
}
#wrap div img{
    width:200px;
    height:150px;
    vertical-align:bottom;
}
#wrap div.active {
    border:1px dashed red;
}
</style>
</head>
<body>
<div id="wrap" class=‘clearfix‘>
  <div><img src="http://pingfan1990.sinaapp.com/javacript/dargimg/1.jpg" /></div>
  <div><img src="http://pingfan1990.sinaapp.com/javacript/dargimg/2.jpg" /></div>
  <div><img src="http://pingfan1990.sinaapp.com/javacript/dargimg/3.jpg" /></div>
  <div><img src="http://pingfan1990.sinaapp.com/javacript/dargimg/4.jpg" /></div>
  <div><img src="http://pingfan1990.sinaapp.com/javacript/dargimg/5.jpg" /></div>
  <div><img src="http://pingfan1990.sinaapp.com/javacript/dargimg/6.jpg" /></div>
  <div><img src="http://pingfan1990.sinaapp.com/javacript/dargimg/7.jpg" /></div>
  <div><img src="http://pingfan1990.sinaapp.com/javacript/dargimg/8.jpg" /></div>
  <div><img src="http://pingfan1990.sinaapp.com/javacript/dargimg/9.jpg" /></div>
</div>
<script type="text/javascript">
var o=document.getElementById("wrap");
var arr=o.getElementsByTagName("div");
var ind=2;
for(var i=arr.length-1;i>=0;i--){
    arr[i].style.left=arr[i].offsetLeft+"px";
    arr[i].style.top=arr[i].offsetTop+"px";
    arr[i].style.position="absolute";
    arr[i].style.margin=0;
    m(arr[i])
}

//拖动和各种判断
function m(obj){
    var tar=null;
    obj.onmousedown=function(e){
        var e=e||event;
        ind++;
        var aa=[obj.offsetLeft,obj.offsetTop];
        var disX=e.clientX-obj.offsetLeft;
        var disY=e.clientY-obj.offsetTop;
        this.style.zIndex=ind;

        document.onmousemove=function(e){
            var e=e||event;
            obj.style.left=e.clientX-disX+"px";
            obj.style.top=e.clientY-disY+"px";

            var s=siblings(obj);
            var mind=9999999;
            var num=-1;
            for(var i=0;i<s.length;i++){
                s[i].className=‘‘;
                if(c(obj,s[i])){
                    var dis=distance(obj,s[i]);
                    if(mind>dis){
                        mind=dis;
                        num=i;
                        for(j=0;j<siblings(obj).length;j++){
                            siblings(obj)[j].className=‘‘;
                        }
                        s[num].className="active";
                    }
                }
                tar=s[num]
            }

        }

        document.onmouseup=function(){
            if(tar){
                tar.className=‘‘;
            }
            exchangePosition(obj,tar,aa);
            document.onmousemove=null;
            document.onmouseup=null;
            }

        return false;
    }
}

function exchangePosition(a,b,x){
    if(b){
        a.style.left=b.offsetLeft+"px";
        a.style.top=b.offsetTop+"px";
        b.style.left=x[0]+"px";
        b.style.top=x[1]+"px";
    }else{
        a.style.left=x[0]+"px";
        a.style.top=x[1]+"px";
    }
}

//求两个Div之间的距离
function distance(x,y){
        var l=x.offsetLeft;
        var t=x.offsetTop;

        var ll=y.offsetLeft;
        var tt=y.offsetTop;

        var dis=Math.sqrt((l-ll)*(l-ll)+(t-tt)*(t-tt));
        return dis
}

//碰撞检测方法
function c(x,y){
    var l=x.offsetLeft;
    var r=l+x.offsetWidth;
    var t=x.offsetTop;
    var b=t+x.offsetHeight;

    var ll=y.offsetLeft;
    var rr=ll+y.offsetWidth;
    var tt=y.offsetTop;
    var bb=tt+y.offsetHeight;

    if(r<ll || b<tt || l>rr || t>bb){
        return false;
    }else{
        return true;
    }
}

function siblings(obj){
    return preall(obj).concat(nextall(obj))
}

function preall(obj){
    var arr=[];
    var o=obj.previousSibling;
    while(o){
        if(o.nodeType==1){
            arr.unshift(o);
        }
        o=o.previousSibling;
    }
    return arr;
}

function nextall(obj){
    var arr=[];
    var o=obj.nextSibling;
    while(o){
        if(o.nodeType==1){
            arr.push(o);
        }
        o=o.nextSibling;
    }
    return arr;
}
</script>
时间: 2024-10-10 08:15:32

拖拽碰撞最后一个问题了,就是拖拽之后,点击会变回去,不知道为何的相关文章

每天一个JavaScript实例-html5拖拽

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-html5拖拽</title> <style> #drop{ width:300px; height:200px; background-

一个能接受外部拖拽的控件(文字或文件)

恩....也是这2天写的一个小东西的需求, 可以拖拽外部文本文件, 或者选择的一段文本到Memo里显示 查了一下资料, 主要从2个方面实现: 1.拖拽文件实现WM_DROPFILES就可以了 2.拖拽文本需要实现IDropTarget接口 针对这个功能, 重新封装了一个Memo出来: TDropMemo = class(TMemo, IUnknown, IDropTarget) private FDropAccept: Boolean; FDTDropAccept: HResult; FFE:

js 拖拽 碰撞 + 重力 运动

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>拖拽 碰撞+重力运动</title&

拖拽+碰撞+重力加速度

鼠标在标题处按下,然后拖动,放下的那一刻执行碰撞+重力加速度事件 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>拖拽+碰撞+重力加速度</title> <met

一个用js实现拖拽的小例子

代码: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 7 <style> 8 9 body { 10 margin: 0; 11 } 12 13 #rect { 14 width: 100px; 15 height: 100px; 16 b

独家原创,拖拽任意控件移动任意目标,拖拽控件移动整个窗体

独家原创,拖拽任意控件移动任意目标,拖拽控件移动整个窗体,在无边框窗体及其友好的实现拖拽移动窗体 http://www.cnblogs.com/vonly/ only原创首发,vonly.net 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Configuration; 5 using System.Diagnostics; 6 using Sys

一个窗体里打开一张图片,点击button,跳转到另一个窗体里,让该窗体显示同一张图片该怎么实现898

一个窗体里打开一张图片,点击button,跳转到另一个窗体里,让该窗体显示同一张图片该怎么实现 baozoumanhua.com/users/17195301/talkingsbaozoumanhua.com/users/17195301/following_articlesbaozoumanhua.com/users/17195301/articlesbaozoumanhua.com/users/17195356baozoumanhua.com/users/17195356/forum_art

快到七夕了,分享一个C写的exe,可以直接点击运行的,效果看下图

原文:快到七夕了,分享一个C写的exe,可以直接点击运行的,效果看下图 源代码下载地址:http://www.zuidaima.com/share/1550463688690688.htm 不要玫瑰.不要礼物,程序员有程序员表达爱情的方式

拖拽碰撞效果,全部搞定,果然闲的没事干

<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>可拖拽的照片墙</title> <style type="text/css"> html body { margin:0; } #wrap { list-style:none; padding:0; margin:30p