鼠标拖动层至任意位子并实时保存

字体大小: 中小 标准 ->行高大小: 标准
/*****************
author:青蛙是害虫
e-mail:229002767@qq.com
QQ:229002767
date:2007.6.20
******************/

在村里面泡了这么久,才发现自己原来除了灌水还真没发过什么帖子!!呵呵...
所以呢..这次正式的献上俺地 处男 作.....
内容不是很多,不过确比较合适和我一样的菜鸟,高手就直接略过吧!!!....

实现的功能:鼠标拖动层至任意位子并实时保存....

所使用技术: ajax php js


第一步: 我们把功能划分一下
既然是鼠标拖动层至任意位子并实时保存.....
那么 a.需要一段JS控制层可以实现拖动到任意位置
b.获取该层在该点的实际X,Y,Z轴坐标
c.将该层的X,Y,Z轴坐标更新.......
d.用户新增留言记录
第一步分析完毕.....



第二步:功能的实现

a.需要一段JS控制层可以实现拖动到任意位置(这一段我不讲,因为这一段JS代码我也没仔细去看,不过知道如何调用就是了......)

b.获取该层在该点的实际X,Y,Z轴坐标
获取该层的实际坐标值,其实还是一段JS~~~~~
var b=document.getElementById(obj); //获取ID为a的层并赋值给b
var oRect=b.getBoundingClientRect(); //获取层的getBoundingClientRect的属性
var x=oRect.left; //获取层当前的X轴坐标
var y=oRect.top;
其实这个只是调用了该层的getBoundingClientRect()方法,也是很简单的一个东西~~
上面这一段JS代码就实现了获取层真实的 X,Y轴的坐标了
那还一个Z轴...Z轴的值我在网上找了好久,没找到!!!
不过之后我想到个办法...
在循环输出每一个层的时候就指定他的Z-INDEX的值,这个是值是用于表明层的覆盖关系的,所以我使用的是递增的办法去解决,查询出数据库中的数据再根据 Z-INDEX的值从小到大进行排列,那么循环的时候Z-INDEX的值也会一次增大,就能实现层的覆盖问题了
还有一个ajax的部分,就是.........被拖动的层一定是在顶层,那么他的Z轴坐标一定要为最大,所以我们可以设置一个隐藏的文本框max,文本框的值在默认的情况下会是数据库中Z轴字段中最大的值,当我们拖动一个层的时候他会把max的值+2赋给层连同X,Y轴坐标一起传给后台程序做更新处理..那当我们再次刷新页面的时候,嘿嘿...是不是我们的层的覆盖效果和我们拖动对象的时候是一样的呢!!!!

c.将该层的X,Y,Z轴坐标更新
这个说白了就是ajax的操作了,ajax如何操作在论坛里面已经写了好多了,我这就不重复去讲了.....当鼠标拖动层到停止的时候,触发一个事件,该时间要获取被拖动的层的X,Y轴坐标,还要获取max文本框的值,再将值传给后台更新程序处理...就OK了!!!!
/********************
这个check函数是获取对象的真实坐标的函数
这个函数其实是起着承上启下的作用
连接上面的鼠标拖动函数,又连接到下面的ajax函数
*********************/
function check(obj)
{
var b=document.getElementById(obj); //获取ID为a的对象并赋值给b
var oRect=b.getBoundingClientRect(); //获取对象的getBoundingClientRect的属性
var x=oRect.left; //获取对象当前的X轴坐标
var y=oRect.top; //获取对象当前的Y轴坐标
var count=document.getElementById('count').value; //获取数据库总共有多少条记录
document.getElementById('count').value=parseInt(count)+2; //为了判断下次拖动层的覆盖效果,count+2
url="move.php?id="+obj+"&x="+x+"&y="+y+"&count="+count;
dopage(obj,url); //这个是将要调用ajax里面的函数
}

d.用户新增记录..哎,这个太easy了,就是最简单的表单传值再添加至数据库,我这就不做说明了




第三步:找BUG
我现在发现的bug(写出来娱乐的东东,没去修正....)
1.用户新增记录没有做判断,即使是全部为空的情况下也可以提交
2.用户在新增记录时候可以输入javascript脚本捣乱
3.似乎是网页编码的问题会导致无法发送ajax至后台程序(本来打算上传到一空间上让大家一起玩玩的,但是就出现了这个问题,暂时不知该如何解决)......

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/29989.html