PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解


Posted in Javascript onOctober 09, 2015

想拖动页面上的层,完全可以用jQuery ui的Draggable方法来实现,那如何将拖动后层的位置保存下来呢?本文将给出答案。本文讲解了如何采用PHP+MySQL+jQuery,实现随意拖动层并即时保存拖动位置。

PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解

本文原理就是通过拖动将拖动后层的相对位置left,top和z-index三个参数更新到数据表中对应的记录,页面通过CSS解析每个层不同的位置。请看具体实现步骤。
准备MySQL数据表
首先需要准备一张表notes,用来记录层的内容,背景色和坐标等信息。

CREATE TABLE IF NOT EXISTS `notes` ( 
 `id` int(11) NOT NULL auto_increment, 
 `content` varchar(200) NOT NULL, 
 `color` enum('yellow','blue','green') NOT NULL default 'yellow', 
 `xyz` varchar(100) default NULL, 
 PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

然后向表中插入几条记录,注意xyz字段表示的是层的xyz坐标的组合,格式为"x|y|z"。
drag.php
在drag.php中,需要读取notes表中的记录,显示在drag.php页面中,代码如下:

include_once('connect.php'); //链接数据库 
$notes = '';  
$left='';  
$top='';  
$zindex='';  
$query = mysql_query("select * from notes order by id desc"); 
while($row=mysql_fetch_array($query)){ 
  list($left,$top,$zindex) = explode('|',$row['xyz']); 
  $notes.= ' 
  <div class="note '.$row['color'].'" style="left:'.$left.'px;top:'.$top.'px;z-index:' 
.$zindex.'"> 
    <span class="data">'.$row['id'].'.</span>'.htmlspecialchars($row['content']).' 
  </div>'; 
}

然后将读取出来的$notes现在在div中。

<div class="demo"> 
  <?php echo $notes;?> 
</div>

注意,我在生成的每个DIV.note中定义了位置,即设置该div的left,top和z-index值。
CSS

.demo{position:relative; height:500px; margin:20px; border:1px dotted #d3d3d3} 
.note{width:150px; height:150px; position:absolute; margin-top:150px; padding:10px; 
 overflow:hidden; cursor:move; font-size:16px; line-height:22px;} 
.note span{margin:2px} 
 
.yellow{background-color:#FDFB8C;border:1px solid #DEDC65;} 
.blue{background-color:#A6E3FC;border:1px solid #75C5E7;} 
.green{background-color:#A5F88B;border:1px solid #98E775;}

有了样式之后,然后运行drag.php,这时就可以看到页面中排列的的几个层,但是还不能拖动,因为还要加入jQuery。
jQuery
首先需要载入jquery库和jquery-ui插件以及global.js。

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

然后再global.js加入代码:

$(function(){ 
  var tmp; 
   
  $('.note').each(function(){ 
    tmp = $(this).css('z-index'); 
    if(tmp>zIndex) zIndex = tmp; 
  }) 
  make_draggable($('.note')); 
}); 
var zIndex = 0;

global.js中,首先在$(function()里定义了一个变量tmp,通过判断每个div.note的z-index值,保证拖动时,该DIV在最上层(即z-index为最大值),就是不会被别的层覆盖。
并且设置zIndex的初始值为0。
接下来,写了一个函数make_draggable();该函数调用jquery ui插件的Draggable方法,处理拖动范围,透明度及拖动停止后执行的更新操作。

function make_draggable(elements){ 
  elements.draggable({ 
    opacity: 0.8, 
    containment:'parent', 
    start:function(e,ui){ ui.helper.css('z-index',++zIndex); }, 
    stop:function(e,ui){ 
      $.get('update_position.php',{ 
         x   : ui.position.left, 
         y   : ui.position.top, 
         z   : zIndex, 
         id  : parseInt(ui.helper.find('span.data').html()) 
      }); 
    } 
  }); 
}

当拖动时,将当前层的z-index属性设置为最大值,即保证当前层在最上面,不被其他层覆盖,并且设置了拖动范围和透明度,当停止拖动时,向后台update_position.php发送一个ajax请求,传递的参数有x,y,z和id的值。接下来我们来看update_position.php的处理。
update_position.php保存拖动位置
update_position.php需要做的是,获取前台通过ajax请求发来的数据,更新数据表中相应的字段内容。

include_once('connect.php'); 
if(!is_numeric($_GET['id']) || !is_numeric($_GET['x']) || !is_numeric($_GET['y']) || 
!is_numeric($_GET['z'])) 
die("0"); 
 
$id = intval($_GET['id']); 
$x = intval($_GET['x']); 
$y = intval($_GET['y']); 
$z = intval($_GET['z']); 
 
mysql_query("UPDATE notes SET xyz='".$x."|".$y."|".$z."' WHERE id=".$id); 
 
echo "1";

以上就是关于PHP+MySQL+jQuery如何实现随意拖动层并即时保存拖动位置的方法,希望对大家的学习有所帮助。

Javascript 相关文章推荐
优化innerHTML操作(提高代码执行效率)
Aug 20 Javascript
jquery使用append(content)方法注意事项分享
Jan 06 Javascript
js this函数调用无需再次抓获id,name或标签名
Mar 03 Javascript
基于jQuery实现复选框是否选中进行答题提示
Dec 10 Javascript
JavaScript 经典实例日常收集整理(常用经典)
Mar 30 Javascript
使用use注册Vue全局组件和全局指令的方法
Mar 08 Javascript
vue 注册组件的使用详解
May 05 Javascript
Vue 组件传值几种常用方法【总结】
May 28 Javascript
Nuxt.js之自动路由原理的实现方法
Nov 21 Javascript
vue全局使用axios的方法实例详解
Nov 22 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
Sep 27 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
Nov 01 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
Oct 09 #Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
Oct 09 #Javascript
jQuery往返城市和日期查询实例讲解
Oct 09 #Javascript
JS实现黑色风格的网页TAB选项卡效果代码
Oct 09 #Javascript
jQuery实现连续动画效果实例分析
Oct 09 #Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
Oct 09 #Javascript
jQuery拖动布局其结果保存到数据库
Oct 09 #Javascript
You might like
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
json数据的列循环示例
2013/09/06 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
VUE中鼠标滚轮使div左右滚动的方法详解
2020/12/14 Vue.js
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
详细介绍Python语言中的按位运算符
2013/11/26 Python
python简单验证码识别的实现方法
2019/05/10 Python
Python:Numpy 求平均向量的实例
2019/06/29 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
Python bytes string相互转换过程解析
2020/03/05 Python
Python Merge函数原理及用法解析
2020/09/16 Python
Python通过字典映射函数实现switch
2020/11/06 Python
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
手工社团活动方案
2014/02/17 职场文书
学校交通安全责任书
2014/08/25 职场文书
客房部经理岗位职责
2015/02/02 职场文书
本溪关门山导游词
2015/02/09 职场文书
社区重阳节活动总结
2015/03/24 职场文书
《牧场之国》教学反思
2016/02/22 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫