`
duinibuhaome
  • 浏览: 41322 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

jquery 拖拽动态添加div 保存拖拽后的效果

阅读更多

拖拽已经折磨我好几天
虽然头已经把拖拽闹完了
可是从他手里接到活的时候
是写死的
而且
不能保存值

经过前面几天的思索  发现走错了路
头突然的一句话点醒了我

最后确定的思路是
先说下设计的数据库吧
url         链接        通过来链接吧内容显示到div中
xuhao   序号        这个值是变化的根据他的顺序来在页面显示拖拽后的div的位置
divId     div的id    这个值从添加以后到删除都不会变
lr           位置        左边l  右边r

先不说添加
首先说一下显示
查询左边显示的数据   根据lr添加条件   xuhao排序
查询右边显示的数据   根据lr添加条件   xuhao排序
String hqlL="from Home where lr='l' order by xuhao";//编写hql语句
homeListL=homeService.findHomeHql(hqlL);//页面中左边显示的数据
String hqlR="from Home where lr='r' order by xuhao";//编写hql语句
homeListR=homeService.findHomeHql(hqlR);//页面中右边显示的数据

那么查询就差完了
该到页面去看看如何显示并且将显示的数据在div中显示了
循环生成div  并且通过divid的值给他的链接赋值
<div id="column1" class="column">
 <s:iterator  value="homeListL">
  <div class="widget" id="${divId}"></div>
  <script>    
   $("#${divId}").load("${url}",null,function(response){
   $("#${divId}").html(response);
   });
  </script>
 </s:iterator>
</div>
<div id="column2" class="column">
 <s:iterator  value="homeListR">
  <div class="widget" id="${divId}"></div>
  <script>
   $("#${divId}").load("${url}",null,function(response){
   $("#${divId}").html(response);
   });
  </script>
 </s:iterator>
</div>

下面来看看拖动的代码所在
<script>

var outerLayout;

$(document).ready( function() {
 outerLayout = $("body").layout();
 $(".column").sortable({
  connectWith: $(".column")
 , placeholder: 'widget-placeholder'
 , cursor:   'move'
 , helper:   function (evt, ui) { return $(ui).clone().appendTo('body').show(); }
 , over:   function (evt, ui) {
       var
        $target_UL = $(ui.placeholder).parent()
       , targetWidth = $target_UL.width()
       , helperWidth = ui.helper.width()
       , padding  = parseInt( ui.helper.css('paddingLeft') )
           + parseInt( ui.helper.css('paddingRight') )
           + parseInt( ui.helper.css('borderLeftWidth') )
           + parseInt( ui.helper.css('borderRightWidth') )
       ;
        ui.helper.height('auto').width( targetWidth - padding );
      }
 , stop:saveLayout 
 });  
});
function saveLayout() {//拖拽以后会触发这个方法
   var col1= $("#column1").sortable("toArray");
   var col2= $("#column2").sortable("toArray");  
   var col=col1+";"+col2;
   location.href="sys/updateHomeDivID.action?col="+col;
}
</script>

看看我们的修改如何闹
首先将拖动后的div顺序传了过来
根据分号分隔值,这样就得到了左边的div和右边的div
a1代表左边的div的id   a2代表右边的div的id 
 String [] a=null;
 if(col!=null && !"".equals(col)){
  a=col.split(";");
 }
 String a1 []=null;
 String a2 []=null;
 if(a[0]!=null && !"".equals(a[0])){
  a1 =a[0].split(",");
 }
 if(a[1]!=null && !"".equals(a[1])){
  a2 =a[1].split(",");
 }
 获取根据usercode获取数据
 homeList=homeService.findHome(user.getUserCode());
 循环homeList你想要什么啊  我当然是要通过匹配divid的值来给其赋值值
 div的值是不变的  但是xuhao 和  lr是变化的啊
 从左边拖到右边  lr的变化从l变到r   xuhao的变化
 从上边拖到下边  lr的没变化              xuhao的变化
 
 循环homeList 如果homeList中有和a1中匹配的divid的话 立马修改位置  修改xuhao 修改lr
 xuhao每次拖拽更新时 都是重新定制的
 for(int i=0;i<homeList.size();i++){
  Home h=(Home)homeList.get(i);
  if(a1!=null && a1.length!=0){
   for(int j=0;j<a1.length;j++){
    if(h.getDivId().equals(a1[j])){
     h.setLr("l");
     h.setXuhao("l"+j);
    }
   }
  }
  
  if(a2!=null && a2.length!=0){
   for(int j=0;j<a2.length;j++){
    if(h.getDivId().equals(a2[j])){
     h.setLr("r");
     h.setXuhao("r"+j);
     
    }
   }
  }
  homeService.updateHome(h);//修改
 }

好了现在拖拽后你的位置就可以保存了
既然这样好了
那是不是还少个一个添加链接的地方呢
是不是还少个能根据页面div布局自动识别新添加的div放哪里呢

首先的定义下div有多少个id  我这里只有十个
想有多少有多少,但是divid一定是要有规律的
定义所有div只能拥有以下id
Home homes;
//*****setter  getter****//
String [] shuzu={"w1","w2","w3","w4","w5","w6","w7","w8","w9","w10"};
可是问题又出现了  我不知道这里面哪个能用  因为divid是不可以重复的
所以就要和数据库中已经存在的divid做个比较  把能用的拿出来

 homeList=homeService.findHome(user.getUserCode());//获取数据库数据
这个比较方式是我从网上摘的   感觉很省力
先把数据库divid拼成字符串
字符串去和shuzu这个divid比较全的数组比较  检索不到的就是还能用的
 String str =""; 
 List shuzuList=new ArrayList();//能用的divid
 for(int j=0;j<homeList.size();j++){
  str+=homeList.get(j).getDivId();    
 } 
 for(int i=0;i<shuzu.length;i++){
  if(str.indexOf(shuzu[i])==-1){
   shuzuList.add(shuzu[i]);
  }
 }
 将第一个能用的使用   因为我的shuzu这个数组顺序都是排列好的
 homes.setDivId(shuzuList.get(0).toString());
 
 接下来  我们的divid已经解决掉了   是该解决xuhao  lr的问题了
 刚开始我是用所有的数据的size来判断新添加的数据该放在哪
 奇数放右边   偶数放左边
 后来问题出现了
 数据有8条
 左边5条  右边3条
 数据是个偶数   应该放在左边的  但是左边已经有5条了  右边只有3条了
 这样看起来不是很好
 只能重新考虑思想
 
 根据比较左边数据和右边数据的大小来决定新来的数据放在哪里
 如果左边数据多的话  那么应该放在右边了
 相等的话                 放在左边好了
 如果左边少的话        放在左边好了
 
 这样lr就这样定好了
 但是xuhao不好闹了  
 我的序号是这样闹的  l0  l1  l2 l3    r0 r1 r2 r3
 只能是这里面最大的xuhao 找第二位分离出来加1 在拼装
 String hqll="from Home where lr='l' order by xuhao";//根据lr=l   序号排序查询值
  List<Home> l=homeService.findHomeHql(hqll);
  String hqlr="from Home where lr='r' order by xuhao";//根据lr=r   序号排序查询值
  List<Home> r=homeService.findHomeHql(hqlr);
  if(null!=homeList &&homeList.size()>0){
   //决定添加数据的位置
   if(l.size()>r.size()){//左边数据多 数据方在右边
    homes.setLr("r");//
    String r1=r.get(r.size()-1).getXuhao().substring(1, 2);
    homes.setXuhao("r"+(Integer.parseInt(r1)+1));
   }else if(l.size()==r.size()){//数据一样多 //数据放在左边
    homes.setLr("l");
    String l1=l.get(l.size()-1).getXuhao().substring(1, 2);
    homes.setXuhao("l"+(Integer.parseInt(l1)+1));
   }else{//数据放在左边
    homes.setLr("l");
    String l1=l.get(l.size()-1).getXuhao().substring(1, 2);
    homes.setXuhao("l"+(Integer.parseInt(l1)+1));
   }
  }
  homes.setUserCode(user.getUserCode());
  f=homeService.addHome(homes);
  
ok 这样就添加进入了

添加的时候制定好divid的值 我们以后就不需要为divid而烦心了 
只需要关心在左边还是在右边   左边是如何排序的 ,右边又是如何排序的
这样我们就轻松多了   就和我那朋友说的 一静一动
 

 

分享到:
评论
6 楼 duinibuhaome 2014-11-10  
好几年前的代码了 已经没保存了
5 楼 lsllsg2014 2014-10-13  
楼主,你好,我现在很需要这个,能发个完整的代码吗 1677498060@qq.com
4 楼 Hey_Tuesday 2013-06-06  
    楼主,您的这个例子是我现在急需的东西,您看到留言能否发一份完整的代码给我,我的邮箱地址是:1583369158@qq.com
3 楼 manboye 2013-05-08  
你好,可发份全的代码给我吗 1148433133@qq.com 先谢了啊 呵呵
2 楼 hongyangshu117 2012-11-30  
你好,我看你代码好像不全呀。。能不能发一份全的给我  1796651803@qq.com  谢谢
1 楼 ganjiang 2012-11-19  
lz是好人,我来评一个

相关推荐

    Jquery Sortable实现div拖动排序效果

    本篇文章将深入探讨如何使用 jQuery Sortable 实现div的拖动排序效果。 首先,你需要在项目中引入 jQuery 和 jQuery UI 的库。jQuery 是一个广泛使用的JavaScript库,而 jQuery UI 提供了包括Sortable在内的多种...

    jquery拖拽排序插件div自由拖动排序代码

    在给定的标题“jquery拖拽排序插件div自由拖动排序代码”中,我们主要讨论的是如何利用jQuery实现一个功能,让用户能够自由地通过拖放操作来对页面上的div元素进行排序。这种功能在许多应用场景中都非常实用,比如...

    jquery div拖动排序效果代码.zip

    本教程将详细讲解如何利用jQuery实现一个div元素的拖动排序效果,结合CSS样式,创建出一款从左到右慢慢展开且可自由拖动排序的特效。 首先,我们需要在HTML中设置好基础结构。创建一系列的div元素,每个div代表一个...

    jQuery鼠标上下拖动div排序代码

    通过以上步骤,我们就成功实现了jQuery鼠标上下拖动div排序的功能,同时也添加了按钮操作的提示效果。这个例子展示了jQuery在增强网页交互性方面的强大能力,结合其他库,我们可以创建更加丰富和灵活的用户界面。在...

    jQueryUI拖拽效果_拖拽div的值到table表格里面

    4. **CSS样式**: 为了提高用户体验,通常需要为可拖动的div和可放置的区域添加适当的CSS样式,以突出其状态,如悬停时的边框颜色变化。 5. **资源引用**: 文件`index.html`应该包含对jQuery、jQuery UI库以及相关...

    jQuery可拖拽DIV页面

    本项目“jQuery可拖拽DIV页面”利用jQuery及其扩展插件jQuery UI,实现了一个用户界面元素(如div)可以被拖动的功能,从而为用户提供更直观的交互体验。以下是对这个知识点的详细讲解: 1. **jQuery基础**:jQuery...

    jQuery拖动插件自定义div拖动代码.zip

    在这个项目中,jQuery被用来添加拖动功能到div元素,使得用户可以通过鼠标操作来移动这些元素。 2. **自定义div拖动**:此插件的核心功能是让开发者能够选择任何div元素,并赋予它们拖动的能力。这意味着开发者可以...

    jQuery拖动div元素标签

    本教程将深入探讨如何利用jQuery UI库中的Draggable功能来实现div元素的拖动,以及如何通过append方法动态添加元素。首先,我们需要了解jQuery UI库的基本用法。 **jQuery UI Draggable组件** jQuery UI的Draggable...

    JQuery可拖拽的DIV排序

    通过鼠标拖动来改变div的顺序,来实现指标的排序。使用了Jquery,jquery-ui.js,sortable,自己原创,效果很绚。 配合ThinkPHP可以实现把数据入库,由于使用的是ubuntu, 文件编码格式都是utf-8.

    jquery 拖拽div

    这样,我们就实现了一个基本的jQuery拖拽功能。然而,为了提高用户体验,还可以添加一些额外的功能,例如限制div的拖动范围、防止穿透其他元素(z-index)以及处理边界反弹等。 在实际项目中,可能还会涉及到性能...

    可拖动div边框改变大小的方法

    可拖动div边框改变大小的方法,jquery拖拽改变div大小效果,。。。。。。。。。。。。。。。。。。。。。。。。。

    jQuery ui drag插件实现浮动div拖动排列布局代码

    本篇文章将深入讲解如何使用jQuery UI Drag插件来创建可拖动的浮动div,并将其应用于布局排列,以及如何将排序结果保存到数据库。 **1. jQuery UI Drag插件介绍** jQuery UI是基于jQuery库的一个扩展,它提供了...

    JQuery拖拽DIV

    在网页开发中,动态交互效果往往能提升用户体验,其中,拖拽功能(Drag and Drop)是一种常见的用户交互设计。JQuery作为一个轻量级、高性能的JavaScript库,为开发者提供了便捷的方式来实现这一功能。本篇文章将深入...

    Asp.net+JQuery拖拽布局并保存至数据库

    标题 "Asp.net+JQuery拖拽布局并保存至数据库" 涉及的技术领域主要集中在Web开发,尤其是客户端交互和后端数据处理。这里我们将深入探讨如何利用JQuery实现拖拽布局,以及如何将这种布局信息存储到Asp.net应用程序的...

    jquery拖动编辑div

    在本文中,我们将深入探讨如何使用jQuery实现一个可拖动且可编辑的div元素,包括关闭功能和颜色变换。jQuery是一个强大的JavaScript库,它简化了DOM操作、事件处理和动画效果,使得创建交互式Web应用变得更为简单。 ...

    jquery简单实现拖拽效果

    在JavaScript的世界里,jQuery...在提供的`drag`文件中,可能包含了实现上述拖拽效果的示例代码或进一步的扩展,如添加缓动效果、限制拖动方向等。通过学习和实践这些代码,你可以更好地掌握jQuery实现拖拽功能的技巧。

    基于bootstrap和jquery的可拖拽移动div,可预览的页面生成器

    标题中的“基于bootstrap和jquery的可拖拽移动div,可预览的页面生成器”指的是一个Web开发工具,它利用Bootstrap框架和jQuery库构建,允许用户通过拖拽和放置的方式设计网页布局,并实时预览编辑效果。Bootstrap是...

    Jquery弹出div层窗口以及div屏幕居中,背景滤镜效果,div拖拽效果

    以上就是关于“jQuery弹出div层窗口、div屏幕居中、背景滤镜效果和div拖拽效果”的核心知识点。通过熟练掌握这些技巧,开发者可以创建更富有互动性和用户体验的网页应用。在实际开发中,还需要根据不同的项目需求,...

    jquery 拖拽图片或div

    拖拽(Draggable)功能是jQuery UI模块中的一个重要部分,它允许用户通过鼠标拖动元素来实现交互效果,如图片、div等。本篇文章将深入探讨如何使用jQuery实现图片和div的拖拽功能。 首先,你需要在项目中引入jQuery...

Global site tag (gtag.js) - Google Analytics