拖拽DIV布局与页面保存
<!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;
{
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();
}
}
浙公网安备 33010602011771号