2012年9月6日星期四

用鼠标画出可移动的div

用鼠标画出可移动的div

测试用例地址:http://jsfiddle.net/maplecumt/q78xZ/3/result/

这个测试用例的div移动出了点问题,因为是第一次使用jsfiddle网站,所以用的不是很熟悉,还希望高手指点。

具体的原理我就不多说了,直接贴代码。

html代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html ="http://www.w3.org/1999/xhtml">    <head>        <title>Draw rectangle</title>        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />            <script src="jquery-1.6.2.min.js" type="text/javascript"></script>        <script src="jquery.ui.core.js" type="text/javascript"></script>        <script src="jquery.ui.widget.js" type="text/javascript"></script>        <script src="jquery.ui.mouse.js" type="text/javascript"></script>        <script src="jquery.ui.draggable.js" type="text/javascript"></script>        <link href="catch.css" rel="stylesheet" type="text/css";charset=gb2312/>        <script src="catch.js" type="text/javascript";charset=gb2312></script>                <!--[if gte IE 7]>            <style type="text/css">                            </style>        <![endif]-->    </head>    <body>            <!--   header   -->            <div id="header">                <label>Draw!</label>            </div>                        <!--   content   -->            <div id="content">                                            </div>            <!--   bottom   -->            <div id="bottom">                        </div>    </body></html>

css代码:

body {    font-family: "Helvetica Neue", "Lucida Grande", "Segoe UI", Arial, Helvetica, Verdana, sans-serif;    margin: 0px;}#header{    width:150px;    margin:0px auto;    }#header label{    font-size:45px;    font-weight:bolder;}#content{    width:90%;    height:600px;    margin:10px auto;    border:1px solid blue;}.new_rect{    opacity: 0.7;    -moz-opacity: 0.7;    filter: alpha(opacity=70);    -ms-filter: alpha(opacity=70);         background:#A8CAEC;    border:1px solid #3399FF;    position:fixed;    float:left;}.new_rect:hover{    cursor:move;}.mousedown{    -webkit-box-shadow:5px 5px 5px black;    -moz-box-shadow:5px 5px 5px black;    box-shadow:5px 5px 5px black;    z-index:999;}

js代码:

//////////////////////////////////////////////////////////$(function () {            //$("div[title=new_rect]").click(function(){alert("click");});    //$(".new_rect").draggable();    drow_rect("#content");    })/////////////////////////////////////////////////////////function drow_rect(the_id){//theid表示用作画布的层            var num=1;var x_down=0,y_down=0;var new_width=0,new_height=0;var x_original=0,y_original=0;var original_flag=true,down_flag=false;var x_point=0,y_point=0;var append_string;                var MouseDown=function(e){            down_flag=true;            x_down=e.pageX;            y_down=e.pageY;//记录鼠标的当前坐标                        if(original_flag){//如果是第一次点击,把起始点的坐标记录到 x_original 和 y_original中                x_original=e.pageX;                y_original=e.pageY;                original_flag=false;            }        };                var MouseMove=function(e){            if(down_flag){//鼠标有移动                x_down=e.pageX;                y_down=e.pageY;                                x_point=x_original;                y_point=y_original;                                new_width=x_down-x_original;                if(new_width<0){//鼠标向左运动                    new_width=-new_width;                    x_point=x_down;                                }                                new_height=y_down-y_original;                if(new_height<0){ //鼠标向右运动                    new_height=-new_height;                    y_point=y_down;                                }                                $("div[name='"+num+"']").remove();//把前面的层删除,并在后面的代码中生成新的层                                append_string="<div class='new_rect' style='left:"+x_point+"px;top:"+y_point+"px;"+"width:"+new_width+"px;height:"                                    +new_height+"px' name='"+num+"' title='第"+num+"个'></div>";                $(the_id).append(append_string);                }        }                $(the_id).bind("mousedown",MouseDown);        $(the_id).bind("mousemove",MouseMove);//事件绑定                $(the_id).mouseup(function(e){//松开鼠标左键,初始化标志位                    down_flag=false;            original_flag=true;            $("div[name='"+num+"']").draggable();                        $("div[name='"+num+"']").mousedown(function(){                $(this).addClass("mousedown");//添加阴影                $(the_id).unbind("mousedown",MouseDown);                $(the_id).unbind("mousemove",MouseMove);//取消事件绑定            });            $("div[name='"+num+"']").mouseup(function(){                $(this).removeClass("mousedown");//删除阴影                $(the_id).bind("mousedown",MouseDown);                $(the_id).bind("mousemove",MouseMove);//事件绑定            });            num++;        });    }

上传一个实例图片:


TAG: