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 相关文章推荐
在浏览器中获取当前执行的脚本文件名的代码
Jul 19 Javascript
jQuery $.data()方法使用注意细节
Dec 31 Javascript
jquery中one()方法的用法实例
Jan 16 Javascript
javascript RegExp 使用说明
May 21 Javascript
分享jQuery封装好的一些常用操作
Jul 28 Javascript
详细谈谈AngularJS的子级作用域问题
Sep 05 Javascript
Vue中保存用户登录状态实例代码
Jun 07 Javascript
JavaScript的六种继承方式(推荐)
Jun 26 Javascript
微信小程序项目实践之主页tab选项实现
Jul 18 Javascript
JavaScript中Array方法你该知道的正确打开方法
Sep 11 Javascript
vue cli 3.0 搭建项目的图文教程
May 17 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
Feb 07 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
复杂检索数据并分页显示的处理方法
2006/10/09 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
thinkPHP5项目中实现QQ第三方登录功能
2017/10/20 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
Tab页界面,用jQuery及Ajax技术实现
2009/09/21 Javascript
js下将字符串当函数执行的方法
2011/07/13 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
js实现秒表计时器
2019/12/16 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
python中enumerate的用法实例解析
2014/08/18 Python
Python将xml和xsl转换为html的方法
2015/03/10 Python
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
python3.6中@property装饰器的使用方法示例
2019/08/17 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
PyQt QMainWindow的使用示例
2021/03/24 Python
合作经营协议书范本
2014/04/17 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
世界环境日活动总结
2015/02/11 职场文书
质量保证书格式模板
2015/02/27 职场文书
2015教师节通讯稿
2015/07/20 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
亲情作文之母爱
2019/09/25 职场文书