jquery 实现页面拖拽并保存到cookie
实现的效果就是页面内的图片可拖拽到任意位置,并将所在位置保存.下次打开页面依然可见.本文是作demo用,实际开发中,位置的数据应保存到数据库中.
好了,开始.
1.准备工作.
a.jquery(1.7.2),ui,cookie插件,json插件.一些图片(本文是5张).
2.页面.
上代码
1
2
3
4
5
6
7
|
< div class = "img_list" id = "img_list" > < div id = "baidu" >< img src = "img/baidu.jpg" id = "www.baidu.com" ></ div > < div id = "google" >< img src = "img/google.png" id = "www.google.com" ></ div > < div id = "csdn" >< img src = "img/csdn.jpg" id = "www.csdn.net" ></ div > < div id = "fly" >< img src = "img/fly.jpg" id = "www.jfbcb.com" ></ div > < div id = "163" >< img src = "img/163.jpg" id = "www.163.com" ></ div > </ div > |
接下,先为每个img的父元素增加draggable,并且动态改变id,这样便于记录时减少工作量.当然,先得给它来2个事件,mouseenter,mouseleave.代码如下.
1
2
3
4
5
6
7
8
9
10
11
|
$( "#img_list div" ).on({ mouseenter: function (){ $( this ).addClass( 'img_move' ); _t_id =$( this ).attr( 'id' ); //保存原来id $( 'div.img_move' ).attr( 'id' , 'img_move' ); }, mouseleave: function (){ $( '#img_move' ).removeClass( 'img_move' ).attr( 'id' ,_t_id); _t_id = '' ; //清空,临时保存id } }); |
到目前为止,我们已实现动态加载id,下面重点来了,让div可拖拽.
只要在mouseenter事件中加上这句就行,这样当鼠标进入某块div时,div就变成可拖拽的了.
1
|
$( "#img_move" ).draggable(); |
3.拖拽后的保存.
如果,你刷新页面会发现,刚拖拽的图片,会恢复到初始位置.这个肯定不行,于是,保存就成了必须.实际开发一定要保存到数据库,因为,客户要是清空了cookie效果全部没有了...坑爹的360常干这事.
这里除了cookie还要用到json插件,这样保存的时候会方便并且把拖拽后元素的信息储备到同一个对象中,便于读取.
上代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$( "#img_move" ).draggable({ start: function (e,ui){ ui.helper.css( 'z-index' , '999' ); //拖动时元素一直是不被遮蔽 }, stop: function (e,ui){ ui.helper.css( 'z-index' , '0' ); //拖动结束,让元素可遮蔽 var x = ui.position.left ; var y = ui.position.top; var id = _t_id; var temp = { 'id' :id, 'x' :x, 'y' :y}; var _data = $.toJSON(temp); //转成json $.cookie( 'img_list_' +_t_id,_data,{expires:1}); //保存信息,设置有效时间 } }); |
ps:元素在页面中的位置,简单的说是left,top的值决定的.
4.刷新后载入.
window.onload后把cookie保存的信息读出来,并赋到对应元素上.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
window.onload = function (){ fix_img( 'baidu' ); fix_img( 'google' ); fix_img( 'csdn' ); fix_img( 'fly' ); fix_img( '163' ); }; //fix_img function fix_img(id){ if (id){ var _test_data = $.cookie( 'img_list_' +id); var _id = $.evalJSON(_test_data).id; var _x = $.evalJSON(_test_data).x; var _y = $.evalJSON(_test_data).y; $( '#' +_id).css( 'left' ,_x+ 'px' ).css( 'top' ,_y+ 'px' ); } } |
5.总结.
1.思路是先拖后保存.实现方式各有不同.
2.实际开发一定要保存到数据库.
3.参考了以下大大的文章.
http://www.zhangxinxu.com/wordpress/
ps:还一些,我记不得,如果是你,让我知道,加你的文章出处.
jquery 实现页面拖拽并保存到cookie的更多相关文章
- jQuery切换网页皮肤保存到Cookie实例
效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/25.htm 以下是源代码: <!DOCTYPE html PUBLIC "-//W3C//D ...
- jQuery切换网页皮肤并保存到Cookie示例代码
经过使用,靠谱! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- 监听页面中的某个div的滚动事件,并将其滚动距离保存到cookie
在html中,写一个id为type的div: <div class="type" id="type"></div> css: .type ...
- 个人学习记录1:二维数组保存到cookie后再读取
二维数组保存到cookie后再读取 var heartsArray = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0],[0,0, ...
- 将用户信息保存到Cookie中
/** * 把用户保存到Cookie * * @param request * @param response * @param member */ private void rememberPwdA ...
- jQuery网页元素拖拽插件
效果说明:配合已有CSS样式,载入插件后,网页元素可以随意在窗口内拖拽,设置了原位置半透明和拖拽半透明的效果选项,可根据需要选择.另外,当页面上有多个可拖拽元素时,可以载入另外一个用于设置z-inde ...
- Jquery.Sorttable 桌面拖拽自定义
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- JQuery UI的拖拽功能
JQuery UI是JQuery官方支持的WebUI 代码库,包含底层交互.动画.特效等API,并且封装了一些Web小部件(Widget).同时,JQuery UI继承了jquery的插件支持,有大量 ...
- JQuery UI的拖拽功能实现方法小结
JQuery UI提供的API极大简化了拖拽功能的开发.只需要分别在拖拽源(source)和目标(target)上调用draggable和droppable两个函数即可. 拖拽原理 首先要明确几个概念 ...
随机推荐
- USACO 2.2 Party Lamps 派对灯 (lamps)
题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码.这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭 ...
- TCPIP通信
最近在开发TCPIP通信,封装了3个类,望各位大神指点指点. using System; using System.Collections.Generic; using System.Text; us ...
- winform程序开机自动启动代码
几天前头儿要我实现程序能开机自动启动,搞好了,整理起来写下来. private void checkBox1_CheckedChanged(object sender, EventArgs e) { ...
- python基础 [Alex视频]
vi hello.py#!/usr/bin/env pythonprint "hello world!"while True: print("hello world!&q ...
- 转: QtCreator调试程序时GDB崩溃
这个情况出现在QtCreator的2.5版以上,是由于新版QtCreator至少需要7.2 IIRC版的GDB.可以到:http://builds.qt-project.org/job/gdb-win ...
- 添加三维动画 demo
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- LightOj_1284 Lights inside 3D Grid
题目链接 题意: 给一个X * Y * Z 的立方体, 每个单位立方体内都有一盏灯, 初始状态是灭的, 你每次操作如下: 1)选择一个点(x1, y1, z1) 再选择一个点(x2, y2, ...
- C++中四种类型转换方式
类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比 ...
- 静态代理VS动态代理
代理Proxy: Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委 ...
- Xcode中使用GitHub详解
为了熟悉git命令及将写的小Demo能够管理起来方便日后查询,所以选择使用GitHub. 现在我们来说说Xcode中如何使用GitHub--- 一.当然是要先有GitHub帐号并登录了(没有的注册一个 ...