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 相关文章推荐
jQuery EasyUI API 中文文档 - NumberBox数字框
Oct 13 Javascript
JavaScript 原型继承
Dec 26 Javascript
jQuery实现可编辑的表格实例讲解(2)
Sep 17 Javascript
Kindeditor单独调用多图上传实例
Jul 31 Javascript
react 父组件与子组件之间的值传递的方法
Sep 14 Javascript
浅谈JavaScript作用域和闭包
Sep 18 Javascript
微信小程序录音与播放录音功能
Dec 25 Javascript
Vue 组件传值几种常用方法【总结】
May 28 Javascript
javascript中UMD规范的代码推演
Aug 29 Javascript
使用layui定义一个模块并使用的例子
Sep 14 Javascript
vue-router 路由传参用法实例分析
Mar 06 Javascript
vantUI 获得piker选中值的自定义ID操作
Nov 04 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中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
JS实现按钮添加背景音乐示例代码
2017/10/17 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
3种vue组件的书写形式
2017/11/29 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
Python日期的加减等操作的示例
2017/08/15 Python
python使用fork实现守护进程的方法
2017/11/16 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
pandas数据处理进阶详解
2019/10/11 Python
如何基于python实现脚本加密
2019/12/28 Python
opencv python如何实现图像二值化
2020/02/03 Python
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
模特大赛策划方案
2014/05/28 职场文书
十周年庆典策划方案
2014/06/03 职场文书
演讲稿的格式及范文
2014/08/22 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
第28个世界无烟日活动总结
2015/02/10 职场文书
公司开会通知
2015/04/20 职场文书
企业百日安全活动总结
2015/05/07 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
七个非常实用的Python工具包总结
2021/06/15 Python
关于python中模块和重载的问题
2021/11/02 Python
Python如何将list中的string转换为int
2022/07/15 Ruby