拖拽DIV布局与页面保存

原文:http://www.rczjp.cn/ArticleShow.aspx?ID=218

<!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>
&nbs p;   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>拖拽布局与保存2中方法演示 </title>
    <style type="text/css">
    .td {background:#4259F9; text-align:center; height:200px; color:#FFFFFF; font-size:36px;}
    #root{margin:0px auto;width:900px;}
    #col1 {width:200px;float:left;}
    #col2{width:150px;float:left;margin:auto 10px;}
    #col3{width:200px;float:left;}
    #col4 {width:100px;float:left;}
    #col1 div,#col2 div,#col3 div,#col4 div {border:1px solid #ccc;height:200px;margin-bottom:10px; padding:5px;}
    </style>

    <script type="text/javascript" src="ajax.js"></script>

    <script type="text/javascript" src="dragdiv.js"></script>

</head>
<body>
    <input type="hidden" id="saveDrag" name="saveDrag" value="" />

    <script type="text/javascript">showStr();</script>

    <input type="button" id="save" value="保存布局" onclick="saveStr();" />
    <div id="root">
        <div id="col1">
            <div id="col1_1">
                 <table width="100%" border="0" cellspacing="0" cellpadding="0">
            &n bsp;       <tr>
               ;          <td onmousedown="mouseDown(this);" class="td">
             & nbsp;              1</td>
             &nb sp;      </tr>
             &nbs p;  </table>
            </div>
            <div id="col1_2">
                 <table width="100%" border="0" cellspacing="0" cellpadding="0">
            &n bsp;       <tr>
               ;          <td onmousedown="mouseDown(this);" class="td">
             & nbsp;              2</td>
             &nb sp;      </tr>
             &nbs p;  </table>
            </div>
        </div>
        <div id="col2">
            <div id="col2_1">
                 <table width="100%" border="0" cellspacing="0" cellpadding="0">
            &n bsp;       <tr>
               ;          <td onmousedown="mouseDown(this);" class="td">
             & nbsp;              3</td>
             &nb sp;      </tr>
             &nbs p;  </table>
            </div>
            <div id="col2_2">
                 <table width="100%" border="0" cellspacing="0" cellpadding="0">
            &n bsp;       <tr>
               ;          <td onmousedown="mouseDown(this);" class="td">
             & nbsp;              4</td>
             &nb sp;      </tr>
             &nbs p;  </table>
            </div>
            <div id="col2_3">
                 <table width="100%" border="0" cellspacing="0" cellpadding="0">
            &n bsp;       <tr>
               ;          <td onmousedown="mouseDown(this);" class="td">
             & nbsp;              5</td>
             &nb sp;      </tr>
             &nbs p;  </table>
            </div>
        </div>
        <div id="col3">
            <div id="col3_1">
                 <table width="100%" border="0" cellspacing="0" cellpadding="0">
            &n bsp;       <tr>
               ;          <td onmousedown="mouseDown(this);" class="td">
             & nbsp;              6</td>
             &nb sp;      </tr>
             &nbs p;  </table>
            </div>
            <div id="col3_2">
                 <table width="100%" border="0" cellspacing="0" cellpadding="0">
            &n bsp;       <tr>
               ;          <td onmousedown="mouseDown(this);" class="td">
             & nbsp;              7</td>
             &nb sp;      </tr>
             &nbs p;  </table>
            </div>
        </div>
        <div id="col4">
            <div id="col4_1">
                 <table width="100%" border="0" cellspacing="0" cellpadding="0">
            &n bsp;       <tr>
               ;          <td onmousedown="mouseDown(this);" class="td">
             & nbsp;              8</td>
             &nb sp;      </tr>
             &nbs p;  </table>
            </div>
            <div id="col4_2">
                 <table width="100%" border="0" cellspacing="0" cellpadding="0">
            &n bsp;       <tr>
               ;          <td onmousedown="mouseDown(this);" class="td">
             & nbsp;              9</td>
             &nb sp;      </tr>
             &nbs p;  </table>
            </div>
        </div>
    </div>
</body>
</html>
|||

---------------拖拽DIV和保存需要用到的2个JS------------------------
--------------- dragdiv.js-------------
var dragObject = null;
var mouseOffset = null;
var tmpDiv=null;
var eleDivW=null;
var dragDiv=null;
var dragDivLen=null;
var cook = new CookieClass();
cook.expires =1;
var nl=0;
var dragNull=[];
var DragContainer= ["col1","col2","col3","col4"];
//-------------------------------------------------------
document.onmousemove = mouseMove;
document.onmouseup = mouseUp;
/*
数据库
*/
function getData(colID,divID){
 var dataArray=divID.split ("Qin_Mi");
 var cookie=new Object();
 for(var i=0;i<dataArray.length;i++) {
  var arr=dataArray[i].split("=");
  if(arr[0]==colID)return unescape(arr[1]);
 }
 return "";
}

window.onload=function(){
 tmpDiv=document.createElement ("div");
 tmpDiv.style.cssText = 'position:absolute;display:none;border:1px dotted #ccc;';
 document.body.appendChild(tmpDiv);
 for(var init=0;init<DragContainer.length;init++){
  var initDragId=DragContainer [init];
  var initDragContainer=document.getElementById (initDragId);
  //var initDragDiv=cook.getCookie (initDragId);//Cookie
  //var dragInfo="col1=col2_1|col3_1Qin_Micol2=col1_1|col2_2Qin_Micol3=col1_2|col3_2|col2_3";
 &n bsp;var dragInfo=document.getElementById("saveDrag").value;//数据库
  var initDragDiv=getData(initDragId,dragInfo);
  
  if(initDragDiv!=0) {
   var initDragArr=initDragDiv.split("|");//%7c,单个DIV拖拽块
   for(var k=0;k<initDragArr.length;k++){
    var chi=document.getElementById(initDragArr [k]);
    initDragContainer.appendChild(chi);
   }
  }
  else{
   dragNull[nl] =initDragId;
   nl=nl+1;
  }
 }
 if (nl>0&&nl<3){
  for(var nn=0;nn<dragNull.length;nn++) {
   var nullId=dragNull[nn];
   var nulldiv=document.getElementById (nullId);
   nulldiv.style.height="20px";
  }
 }
}
//---------------------
function CookieClass(){
 this.expires = 0 ;
 this.path = "";
 this.domain = "";
 this.secure = false;
 
 this.setCookie = function(name,value){
  var str = name+"="+escape(value);
  if (this.expires>0){
  var date=new Date ();
  var ms=this.expires * 60 * 1000;
  date.setTime(date.getTime() +ms);
  str+="; expires="+date.toGMTString();
 }
 if(this.path!="") str+="; path="+this.path;
 if(this.domain!="")str+="; domain="+this.domain;
 if (this.secure!="")str+="; true";
 document.cookie=str;
}

/*
Cookie
*/
this.getCookie=function(name){
 var cookieArray=document.cookie.split("; ");
 var cookie=new Object();
 for(var i=0;i<cookieArray.length;i++){
  var arr=cookieArray[i].split ("=");
  if(arr[0]==name)return unescape(arr[1]);
 }
 return "";
}

this.deleteCookie=function(name){
 var date=new Date();
 var ms= 1 * 1000;
 date.setTime(date.getTime() - ms);
 var str = name+"=no; expires=" + date.toGMTString();
 document.cookie=str;
}

this.showCookie=function(){
 alert(unescape(document.cookie));
}
}

function getEvent(){
     if(document.all)    return window.event;
     func=getEvent.caller;
     while(func!=null){
         var arg0=func.arguments [0];
         if(arg0) {
             if ((arg0.constructor==Event || arg0.constructor ==MouseEvent)
                || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)) {   
                return arg0;
              }
         }
          func=func.caller;
        }
        return null;
}

//鼠标位置
function mouseCoords(ev){
 if(ev.pageX || ev.pageY) {
  return {x:ev.pageX, y:ev.pageY};
 }
 return {
  x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
  y:ev.clientY + document.body.scrollTop - document.body.clientTop
 };
}

function getPosition(ele){
 var left = 0;
 var top = 0;
 while (ele.offsetParent){
  left += ele.offsetLeft;
  top += ele.offsetTop;
  ele = ele.offsetParent;
 }
 left += ele.offsetLeft;
 top += ele.offsetTop;
 return {x:left, y:top};
}

function getMouseOffset(target, ev){
 var docPos = getPosition(target);
 var mousePos = mouseCoords(ev);
 return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function mouseDown(elem){
 ev=getEvent();
 dragObject = elem.parentNode.parentNode.parentNode;
 dragDiv=dragObject.parentNode.parentNode;
&nbs p;dragDivLen=dragDiv.getElementsByTagName("div").length;
 mouseOffset = getMouseOffset (dragObject, ev);
 eleDivW=dragObject.parentNode.offsetWidth;
 dragObject.parentNode.style.bor der="1px dotted #ccc";
 return false;
}

function mouseMove(){
 ev=getEvent();
 var mousePos = mouseCoords (ev);
 if(dragObject){
  if(dragDivLen==1) dragDiv.style.height="20px";
  dragObject.parentNode.style.display="none";
   for(var i=0; i<tmpDiv.childNodes.length; i++) tmpDiv.removeChild(tmpDiv.childNodes [i]);
  tmpDiv.appendChild(dragObject.cloneNode (true));
  tmpDiv.style.width=eleDivW+"px";
  tmpDiv.style.backgroundCo lor="#FFFFFF";
  tmpDiv.style.display="block";
  tmpDiv.style.top = (mousePos.y - mouseOffset.y)+"px";
  tmpDiv.style.left = (mousePos.x - mouseOffset.x)+"px";
  
  var dragObjCntX=mousePos.x - mouseOffset.x+parseInt(dragObject.offsetWidth)/2;
  var dragObjCntY=mousePos.y - mouseOffset.y+parseInt(dragObject.offsetHeight)/2;
  var dragConLen=DragContainer.length;
  for(var i=0;i<dragConLen;i++) {
   var curContainer=document.getElementById(DragContainer [i]);
   var dcPos=getPosition(curContainer);
   var dcPosMinX=dcPos.x;
   var dcPosMinY=dcPos.y;
   var dcWidth=curContainer.offsetWidth;
   var dcHeight=curContainer.offsetHeight;
   var dcPosMaxX=dcPosMinX+dcWidth;
   var dcPosMaxY=dcPosMinY+dcHeight;
   if (dragObjCntX>dcPosMinX&&dragObjCntX<dcPosMaxX&&dragObjCntY>dcPosMinY& ;&dragObjCntY<dcPosMaxY){
    var activeContainer=curContainer;
    break;
   }
  }
 }
 if(activeContainer){
  var beforNode=null;
  var sDiv=activeContainer.getElementsByTagName("div")
  var acChiLen=sDiv.length;
  for(j=acChiLen-1;j>=0;j--) {
   var activeDiv=sDiv[j];
   if(activeDiv) {
    var activeDivPos=getPosition (activeDiv);
    var activeDivMinX=activeDivPos.x;
    var activeDivMinY=activeDivPos.y;
    var activeDivMaxX=activeDivMinX+activeDiv.offsetWidth;
    var activeDivMaxY=activeDivMinY+activeDiv.offsetHeight;
    if (activeDivMaxX>dragObjCntX&&activeDivMaxY>dragObjCntY) {
    //if (dragObjCntX>activeDivMinX&&dragObjCntX<activeDivMaxX&&dragObjCntY>activ eDivMinY&&dragObjCntY<activeDivMaxY) {
     beforNode=activeDiv;
    }
   }
   
  }
  if(beforNode! =null){
   if(dragObject.parentNode!=beforNode) {
    curContainer.insertBefore (dragObject.parentNode,beforNode);
    dragObject.parentNode.style.display ="block";
    //document.getElementById ("test").value=curContainer.id;
   }
  }
  else {
   curContainer.appendChild (dragObject.parentNode);
   dragObject.parentNode.style.display="block";
&nb sp; }
 }
 return false;
}
//鼠标松开事件
function mouseUp() {
 if(dragObject){
  if(dragObject.parentNode.style.display=="none") dragObject.parentNode.style.display="block";
  dragObject.parentNode.style.border="1 px solid #ccc";
  tmpDiv.style.display="none";
  for(var m=0;m<DragContainer.length;m++){
   var colDiv=document.getElementById (DragContainer[m]);
   var colDivLen=colDiv.getElementsByTagName ("div").length
   var colSty=colDiv.getAttribute ("style");
   if(colDivLen>0&&colSty!=null) {
    colDiv.removeAttribute ("style");
    break;
   }
  }
  var qmArr=[];
  for(var ed=0;ed<DragContainer.length;ed++) {
   var dragConId=DragContainer[ed];
   var dragObj=document.getElementById(dragConId);
   //dragObj.removeAttribute ("style");
   var dragDiv=dragObj.getElementsByTagName ("div");
   if(dragDiv){
    var dragDivIdArr= [];
    for(var dd=0;dd<dragDiv.length;dd++) {
     dragDivIdArr[dd]=dragDiv[dd].getAttribute ("id");
    }
    tmp=dragDivIdArr.join ("|");
    if(tmp=="") tmp=0;
    qmArr+=dragConId+"="+tmp+"Qin_Mi";
   }
   cook.setCookie(dragConId,tmp);
  }
  document.getElementById ("saveDrag").value=qmArr;
  dragObject=null;
  return false;
 }
}

-------------ajax.js--------
$=function(o){return typeof(o)=="string"? document.getElementById(o):o};
function creatXmlObj(){
if(window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHttp");
}
else if(window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}

function saveStr(){
creatXmlObj();
var url = "DragTest.aspx? flag=save&str="+$("saveDrag").value;
xmlHttp.open("GET",url,false);
xmlHttp.send (null);
if(xmlHttp.responseText=="ok"){
        alert(" 保存成功!");
        }
        else {
        alert("保存失 败!");
        }
}


function showStr(){
creatXmlObj();
xmlHttp.open("GET","DragTest.aspx? flag=show",false);
xmlHttp.send(null);
$("saveDrag").value=xmlHttp.responseText;
}

|||

----------------C#保存与显示布局的代码-----------------------
------------DragTest.aspx.cs -------------
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration;

public partial class DragTest : System.Web.UI.Page
{
    string connstr = ConfigurationManager.AppSettings["ConnectionString"];
    SqlConnection conn;
    protected void Page_Load(object sender, EventArgs e)
    {
        conn = new SqlConnection (connstr);
        if (Request.QueryString["flag"] == "save" && !String.IsNullOrEmpty(Request.QueryString["str"]))
        {
            UpdateDrag ();
        }
        else if (Request.QueryString["flag"] == "show")
        {
            ShowDrag ();
        }
    }
    public void UpdateDrag()
    {
        conn.Open();
        string updateSql = "Update  DragSave Set DragInfo='" + Request.QueryString["str"] + "'";
        SqlCommand comm = new SqlCommand(updateSql, conn);
        comm.CommandText = updateSql;
        comm.ExecuteNonQuery ();
        conn.Close ();
        Response.Write ("ok");
        Response.End();
    }
    public void ShowDrag()
    {
        conn.Open ();
        string sql = "Select * From DragSave";
        SqlCommand comm = new SqlCommand(sql, conn);
        SqlDataReader sdr = comm.ExecuteReader ();
        string dragInfo = "";
        if (sdr.Read())
        {
            dragInfo = sdr ["DragInfo"].ToString();
        }
        if (!sdr.IsClosed) { sdr.Close(); }
        conn.Close ();
        Response.Write (dragInfo);
        Response.End();
    }
}
posted on 2009-09-26 10:52  冷月孤峰  阅读(935)  评论(0)    收藏  举报