jQuery实现拖动布局并将排序结果保存到数据库

很多网站的拖动布局的例子都是采用浏览器的COOKIE来记录用户拖动模块的位置,也就是说拖动后各模块的排序位置信息是记录在客户端的cookie里的。当用户清空客户端的cookie或浏览器的cookie过期后,再次访问页面时,发现布局又还原成最初的状态。这种cookie记录的方式使用简单,但不适合像个人中心、管理系统主页的要求。

本例实现的效果:

  • 通过拖动随意布局页面模块。
  • 记录拖动后模块的位置,并记录到数据库中。
  • 页面永久性布局,用任意浏览器在任意时候打开,页面布局不变。(除非用户再次更改模块的排序,跟cookie没有关系)。

原理

采用jquery uisorttable拖动排序插件实现拖动效果。

将拖动后的模块的位置通过ajax传给服务端PHP程序。

PHP程序处理位置信息后,更新数据库中相应的字段内容。

XHTML

 <div id="loader"></div> <div id="module_list">    <input type="hidden" id="orderlist" />    <div class="modules" title="1">       <h3 class="m_title">Module:1</h3>       <p>1</p>    </div>    ... </div> 

DIV#loader用于显示提示信息,如loading...,#orderlist是一个隐藏域,用于记录模块的排序值。“...”表示循环了n个DIV.modules,具体生成的代码在后面会讲到。

CSS

 #module_list{margin-left:4px} .modules{float:left; width:200px; height:140px; margin:10px; border:1px solid #acc6e9;  background:#e8f5fe} .m_title{height:24px; line-height:24px; background:#afc6e9} #loader{height:24px; text-align:center} 

简单,关键是要给.modules一个想左浮动的样式float:left。

jQuery

 $(function(){     $(".m_title").bind(‘mouseover‘,function(){         $(this).css("cursor","move")     });          var $show = $("#loader");      var $orderlist = $("#orderlist");     var $list = $("#module_list");          $list.sortable({         opacity: 0.6, //设置拖动时候的透明度         revert: true, //缓冲效果         cursor: ‘move‘, //拖动的时候鼠标样式         handle: ‘.m_title‘,  //可以拖动的部位,模块的标题部分         update: function(){              var new_order = [];              $list.children(".modules").each(function() {                 new_order.push(this.title);              });              var newid = new_order.join(‘,‘);              var oldid = $orderlist.val();              $.ajax({                 type: "post",                 url: "update.php", //服务端处理程序                 data: { id: newid, order: oldid },   //id:新的排列对应的ID,order:原排列顺序                 beforeSend: function() {                      $show.html("<img src=‘load.gif‘ /> 正在更新");                 },                 success: function(msg) {                      //alert(msg);                      $show.html("");                 }              });         }     }); }); 

拖动排序的动作都写在$list.sortable({...})里面,参数设置和方法请看代码的注释。juery ui的sortable插件提供了很多方法和参数配置,详情请查看http://jqueryui.com/demos/sortable

拖动完成要执行一个update方法,该方法需要将拖动后排序的位置通过ajax提交给后台处理。

 var new_order = []; $list.children(".modules").each(function() {      new_order.push(this.title); }); var newid = new_order.join(‘,‘); var oldid = $orderlist.val(); 

说明:循环每个模块.modules,获取拖动排序后每个模块的属性title值,将值通过逗号连接成一个字符串。原来的未拖动之前的排序值从隐藏域orderlist中获取。

获取排序值后,就是通过ajax和后台程序交互了。

PHP

update.php接收前端ajax通过POST提交过来的两个参数,及排序前的值和排序后的值,将这连个值进行对比,如果不相等,则更新数据库中的排序字段,完成了拖动排序后的及时保存。

 include_once("connect.php");//连接数据库 $order = $_POST[‘order‘]; $itemid = trim($_POST[‘id‘]); if (!empty ($itemid)) {     if ($order != $itemid) {         $query = mysql_query("update sortlist set sort=‘$itemid‘ where id=1");         if ($query) {             echo $itemid;         } else {             echo "none";         }     } } 

首页index.php

再回到展示布局的首页index.php。index.php通过连接数据库读取模块的排序信息,并将各模块显示出来。

首先别忘了加载jquery库和jquery ui的sortable拖动排序插件。

 <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery-ui.min.js"></script> 

读取数据库的排序字段值。

 include_once("connect.php");  $query=mysql_query("select * from sortlist where id=1"); if($rs=mysql_fetch_array($query)){        $sort=$rs[‘sort‘]; } $sort_arr=explode(",",$sort); $len=count($sort_arr); 

循环显示各模块。

 <div id="loader"></div> <div id="module_list">   <input type="hidden" id="orderlist" value="<?php echo $sort;?>" />   <?php       for($i=0;$i<$len;$i++){   ?>   <div class="modules" title="<?php echo $sort_arr[$i]; ?>">       <h3 class="m_title">Module:<?php echo $sort_arr[$i]; ?></h3>       <p><?php echo $sort_arr[$i]; ?></p>   </div>   <?php } ?> </div> 
时间: 2024-11-09 16:38:03

jQuery实现拖动布局并将排序结果保存到数据库的相关文章

jquery.dragsort实现列表拖曳、排序

在一次工作中需要将功能模块实现拖曳并且排序,并且将排序结果保存到数据库,用户下次登录后直接读取数据库排序信息进行显示.LZ找了好多插件,最后发现 jquery.dragsort 这款插件是最好使用的,使用简单,配置方便. 下面我将演示如何使用该插件: 一.导入js.该插件是基于jQuery开发的,所以我们除了要导入jquery.dragsort.js外还需要导入jQuery. 二.HTML部分 <div class="model_main"> <ul class=&q

jquery 鼠标拖动排序Li或Table

1.前端页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="拖动排序Li或Table.aspx.cs" Inherits="拖动排序Li或Table" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o

最好用的jquery列表拖动排列(由项目提取)

代码压缩包下载: http://pan.baidu.com/s/1mgxAIy0 代码一预览: <!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">

Jquery 多行拖拽图片排序 jq优化

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>jQuery图片拖动排序代码</title> <style type="text/css"> .item_container{position:relative;height:auto;overflow:hidden;} .item_content ul{list-

jQuery UI 拖动(Draggable) - 事件

定义和用法 draggable 上的 start.drag 和 stop 事件.拖拽开始时触发 start 事件,拖拽期间触发 drag 事件,拖拽停止时触发  stop 事件 示例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"&

jQuery UI 拖动(Draggable) - Handles和Cancel

定义和用法 只有当光标在 draggable 上指定部分时才允许拖拽.使用 handle 选项来指定用于拖拽对象的元素(或元素组)的 jQuery 选择 器或者当光标在 draggable 内指定元素(或元素组)上时不允许拖拽.使用 cancel选项来指定取消拖拽功能的 jQuery 选择器 示例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equi

jQuery UI 拖动(Draggable) - 还原位置

定义和用法 当带有布尔值 revert 选项的 draggable 停止拖拽时,返回 draggable(或它的助手)到原始位置 示例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>jQuery 

自适应屏幕的jQuery响应式布局网站特效代码

jQuery响应式图片九宫格布局点击图片查看大图效果代码 jquery响应式布局_宽屏响应式焦点图片动画轮播代码 css3绘图制作css3响应式组织架构图形代码 jQuery css3图片翻转响应式布局翻转图片筛选器代码 jquery html5响应式幻灯片插件网站响应式全屏幻灯片轮播代码 jQuery响应式焦点图插件制作响应式全屏焦点图切换代码 jQuery html5全屏响应式幻灯片制作触屏手机幻灯片代码 jQuery图片响应式布局点击弹出图片响应式幻灯片代码 jquery 3d响应式幻灯片

jQuery UI 拖动(Draggable) - 延迟开始

定义和用法 通过 delay 选项设置延迟开始拖拽的毫秒数.通过 distance 选项设置光标被按下且拖拽指定像素后才允许拖拽 示例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>jQuery