来源:http://www.oophp.cn/article/view/id/371

现在的网站...很多模块化的东西..都希望实现可视化的操作..主要原因是为了提高用户体验.增强用户的粘合度.当然这也间接性地体现出本网站的高质量 性能...用Javascript 实现页面的拖动与同步保存,在技术上已经不是什么新的东西..因为我们所接触的系统就有.比如Google的用户面版iGoogle,当然还有百度的my 百度.这二个系统就很好的提现出拖动层的运用..当我们在运用这些系统的时候..我们会感觉非同一般
感受..脑海中会出现一个字:赞!
    今天我也要来玩一把这个拖动层.(这原因当然是公司的系统中需要这个功能).当然我的Javascript的功力还不到Google,百度它们公司人员的 十分之一.所以呢..我借助的是Jquery这个JS类库来实现这么一个功能. 在介绍功能实现之前:先上几张效果图片:

拖动一:

拖动二:


    在介绍这个功能实现之前,我想很多朋友都会Jquery.同时,对Jquery这里面的UI功能是有相当的认识的.UI里面有一个sortable这么一一块的介绍..其实里面的大部分功能都已经写好了拖动效果.我们只需要学会用就可以....
    第一:
    我们需要加入Jquery.js的库文件,还有Jquery UI核心文件:ui.core.js,最后一个就是UI 拖动层文件:ui.sortable.js.以及一些UI样式.
代码如下 :

<script type="text/javascript"
src="../../jquery-1.3.2.js"
></script>
<script type="text/javascript"
src="../../ui/ui.core.js"
></script>
<script type="text/javascript"
src="../../ui/ui.sortable.js"
></script>
<link type="text/css"
href="../../themes/base/ui.all.css"
rel="stylesheet"
/>

第二: 接下来写我们拖动层的JS函数功能.主要的函数(sortable)如下(注:我这里只基本功能):

$(
function
(
)
{
$(
".column"
)
.sortable
(
{
connectWith: '.column'
,//要拖动层的列

opacity: 0.4
,//模糊效果值

revert: true
,
stop
:saveLayout//拖动完成后,回调函数.这里就可以通过AJAX把层的顺序保存在数据库里面

}
)
;
$(
".portlet"
)
.addClass
(
"ui-widget ui-widget-content ui-helper-clearfix ui-corner-all "
)

.find
(
".portlet-header"
)

.addClass
(
"ui-widget-header ui-corner-all"
)

.prepend
(
'<span class="ui-icon ui-icon-plusthick"></span>'
)

.end
(
)

.find
(
".portlet-content"
)
.addClass
(
"movehand"
)
;

$(
".portlet-header .ui-icon"
)
.click
(
function
(
)
{
$(
this
)
.toggleClass
(
"ui-icon-minusthick"
)
;
$(
this
)
.parents
(
".portlet:first"
)
.find
(
".portlet-content"
)
.toggle
(
)
;
}
)
;
$(
".column"
)
.disableSelection
(
)
;
}

关于sortable这个函数所有值代表的意思,我也不在这里多介绍了..因为比较多..不是太好多介绍..朋友们可以参考jquery的UI API介绍..在那里介绍的很详细..不过是E文.但都很
简单.慢慢看吧..呵呵....

第三:写一些乱七八糟的功能,比如上下排序层,删除层和拖动前或拖动完成后等等一些回调函数.

//保存模块排序并写入Cookie (^_^我这里只有COOKIE保存.当然你可以保存在数据库里面)

//保存模块排序并写入Cookie (^_^我这里只有COOKIE保存.当然你可以保存在数据库里面)

function
saveLayout(
)
{
$.cookie
(
'my_self_panle'
,getVales(
)
)
;
changeIcon(
)
;
}
//每一列模块的值,其实sortable这个函数里有一个serialize可以直接取到对应的序列值:格式如下:

// $('#left').sortable('serialize',{key:'leftmod[]'}) + '&' + $('#right').sortable('serialize',{key:'rightmod[]'})

//我这里就没有用这个东西

function
getVales(
)

{
var
vales=''
;
var
Tstring=new
Array(
)
;
var
areas=new
Array(
'left'
,'center'
,'right'
)
;
$.each
(
areas, function
(
i, vals)
{
$(
'#'
+vals+'>.portlet'
)
.each
(
function
(
j)
{
vales=vales+'&'
+this
.id
;
}
)
;
Tstring[
i]
=vales;
vales=''

}
)
;
return
Tstring;
}

//这里只是改变上下排序的图标.

function
changeIcon(
)

{
var
areas=new
Array(
'left'
,'center'
,'right'
)
;
$.each
(
areas, function
(
i, vals)
{
$(
'#'
+vals)
.find
(
".portlet-header >span"
)
.show
(
)
;
$(
'#'
+vals+' div:first-child'
)
.find
(
".portlet-header >span:nth-child(4)"
)
.hide
(
)
;
$(
'#'
+vals+' div:last-child'
)
.find
(
".portlet-header >span:nth-child(3)"
)
.hide
(
)
;
}
)
;
}

//把一个层向上.这个函数写的不算好..我总认为有更好的方法.比如用:clone方法.

//有好的方法的朋友可以指导一下我.

function
up(
obj)

{
var
this_obj=$(
obj)
.closest
(
"div"
)
;
var
prev_html = this_obj.prev
(
)
.html
(
)
;
var
this_html = this_obj.html
(
)
;
var
prev_id = this_obj.prev
(
)
.attr
(
"id"
)
;
var
this_id = this_obj.attr
(
"id"
)
;

this_obj.prev
(
)
.html
(
this_html)
;
this_obj.prev
(
)
.attr
(
'id'
,this_id)
;
this_obj.html
(
prev_html)
;
this_obj.attr
(
'id'
,prev_id)
;
saveLayout(
)
;//排序后.我们也要保存层

}

//同上面.只是这个是让一个层向下

function
down(
obj)

{
var
this_obj=$(
obj)
.closest
(
"div"
)
;
var
next_html = this_obj.next
(
)
.html
(
)
;
var
this_html = this_obj.html
(
)
;
var
next_id = this_obj.next
(
)
.attr
(
"id"
)
;
var
this_id = this_obj.attr
(
"id"
)
;
this_obj.next
(
)
.html
(
this_html)
;
this_obj.next
(
)
.attr
(
'id'
,this_id)
;
this_obj.html
(
next_html)
;
this_obj.attr
(
'id'
,next_id)
;
saveLayout(
)
;
}

//一个简单的,删除一个层

function
del(
obj)

{
var
this_box=$(
obj)
.closest
(
"div"
)
.remove
(
)
;
saveLayout(
)
;
}

最后.要说的,就是这个功能完结了...目前公司开发里,只用了一小部分这个功能...不过我自己的一个项目中...嘿嘿...用了这个功能.
用户可以自己排列自己的网站页面与功能...过些时日...有空的话..我把我的系统再完整一下...有机会朋友可以测试玩一下...帮我
找找问题...这也是进步~~~~

总结:一个小的教程可能对朋友们只能算是一块小的砖头...不知道能不能引出几块好的玉来...希望有更多的朋友加入分享自己成果的行列中....其实这样到最后,收获
最大的还是自己....这也是我为什么在很累的时候都希望自己有时间可以写一些自己所得到的东西...我不期待什么好的回报...只是
期待更多朋友可以自己去学习,发现..再分享~~~~~

怎样用Jquery实现拖拽层,并实现网站自定义化模块功能?相关推荐

  1. Jquery 可拖拽的Ztree(移动,复制)两种选择

    首先要引入ztree依赖的js <link rel="stylesheet" type="text/css" href="<c:url v ...

  2. jquery gridly (拖拽插件)

    Jquery Gridly 在项目中的使用 1.引入 js 和 css 两个文件,项目中位置如下 /erptheme/jqueryGridly/jquery.gridly.js/erptheme/jq ...

  3. jquery ui 拖拽

    Query UI是JQuery官方支持的WebUI 代码库,包含底层交互.动画.特效等API,并且封装了一些Web小部件(Widget).同时,JQuery UI继承了jquery的插件支持,有大量的 ...

  4. jQuery UI 拖拽功能

    原文地址:http://www.cnblogs.com/holbrook/archive/2012/03/13/2394111.html JQuery UI是JQuery官方支持的WebUI 代码库, ...

  5. JQuery UI 拖拽排序

    html代码: <div class="sortable"><div class="item"><img src="im ...

  6. jQuery 鼠标拖拽移动窗口

    拖拽移动需要注意的是:拖拽移动的窗口是如何定位的,如果"left"属性为"%" ,以"margin-left"来计算定位,如下实例,如果&q ...

  7. 拖拽即可创建HTML5网站的建站平台

    摘要: 随着移动热潮的兴起,Flash 逐渐没落,HTML5 崛起,Wix也顺势推出了支持HTML5的拖拽建站技术,完全不懂技术的人也可以利用 Wix 建造跨越手机和 PC 浏览器的网站和应用. .. ...

  8. Java拖拽控件数据库_java实现鼠标拖放功能代码实例

    java实现鼠标拖放功能代码实例 利用鼠标的拖放来交换程序的数据,即所谓的鼠标拖放功能.鼠标的拖放功能在图形化系统中非常常用,Java 提供了java.awt.dnd 和java.awt.datatr ...

  9. html拖拽页面特效,div+css实现网页模块或栏目拖动(即拖拽效果)

    //为Number增加一个属性,判断当前数据类型是否是数字 Number.prototype.NaN0=function(){return isNaN(this)?0:this;} //全局变量 va ...

最新文章

  1. 和12岁小同志搞创客开发:手撕代码,做一款火焰报警器
  2. PHP中$_SERVER[QUERY_STRING]函数
  3. 《强化学习周刊》第13期:强化学习应用之金融
  4. while loading shared libraries: libmysqlclient....
  5. 【运筹学】线性规划 单纯形法 案例二 ( 第一次迭代 | 矩阵变换 | 检验数计算 | 最优解判定 | 入基变量 | 出基变量 )
  6. ArcIMS 开发学习笔记(一)
  7. 【渝粤题库】国家开放大学2021春2143西方经济学题目
  8. 装配组件_基于Haption力反馈系统的交互式装配仿真
  9. htmlentities在mysql_PHP和mySQL:何时确切使用htmlentities?
  10. Flink :刷屏 forceKillApplication over null,Retrying immediately The Client is Stopped
  11. 跑linux编译什么CPU速度快,linux 加快编译速度
  12. Unity Physics.Raycast踩坑
  13. 光模块自动测试系统软件,可插拔收发光模块自动化检测系统
  14. Qt视频直播软件--项目实战(Day5)
  15. STM32F103实现CMSIS-DAP
  16. 计算机网络(2)——电路交换 报文交换 分组交换
  17. 英文字母间距非常大的问题
  18. DPDK系列之三DPDK介绍及简单应用
  19. HTML和CSS (前端)
  20. Unity引擎制作仿《文明》游戏

热门文章

  1. 在C#项目中使用SQLite(环境安装问题)
  2. C#中利用委托实现多线程跨线程操作
  3. 南方s730手簿说明书_最新S730手簿及3.0简易操作82
  4. python播放wav文件_python3 写一个WAV音频文件播放器的代码
  5. 简述数学建模的过程_数学建模的基本步骤
  6. 渗透测试报告封面样本
  7. Base64加密和Md5加密用户名
  8. Linux cd后显示文件,关于linux系统显示文件的问题!
  9. 数据分析结果解读_聚类分析的实际运用及案例解读(二)
  10. 设置activity不可返回