• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >jquery > Jquery UI实现一次拖拽多个选中的元素操作

Jquery UI实现一次拖拽多个选中的元素操作

作者:Jeremy阳仔 字体:[增加 减小] 来源:互联网

Jeremy阳仔 通过本文主要向大家介绍了Jquery,UI一次拖拽多个元素,jquery拖拽元素,jquery,UI拖拽多个元素等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

项目需要,实现一个拖放操作,要求每次可以拖拽选中的多个元素,释放到目标容器后可排序。考虑了一下,觉得jquery-ui比较合适,毕竟它提供了项目需要的交互性事件机制。拖拽、释放、排序、选择等效果。而在实际的操作中,遇到个很多的问题,说明一下,最后附上效果图和代码。

1.本人使用的bootstrap框架,引入jquery-ui后,为元素添加拖拽方法后,提示该方法不是一个函数。查找原因,是bootstrap和jquery-uide的$ 标识符控制权冲突。在引入的jquery-ui的js前加上一下语句解决

<script>
    jQuery.noConflict();
</script>

2.jquery-ui的提供了选择操作(单选,多选),其中多选可以按住Ctrl配合鼠标单击多选,也可以鼠标在多个元素上拖拽进行多选。在为同一元素添加上选择操作和拖拽操作时,出现了问题。

a:多选的操作由于可以在元素上拖拽,与本身的拖拽事件有冲突(个人认为鼠标拖拽多选的效果并没有使用shift配合鼠标点击好用)。

b:jquery-ui没有发现可以将多个单独的元素同时拖拽。

不知道是本人愚钝没有发现jquery-ui可以使用本身自带的方法和属性,即可以支持多选又能拖拽选中的元素操作。哪位读者如果知晓还请告知。3Q!

总之,试验了多个jquery-ui的属性和事件,有去试着将jquery-ui的拖拽多选操作删除,也没有发现我需要的效果。所以,考虑了一下,决定不适用jquery-ui的选择操作。自己来写一个选择操作。与我们平常使用的事件触发机制一样。(鼠标单击单选,Ctrl+鼠标多选,Shift+鼠标多选),然后配合jquery-ui的drag和drop和sort事件机制实现拖拽排序效果。

再插一嘴,拖拽多个元素的效果,实际上是拖拽一个指定的dom元素,可以将需要拖拽的所有节点都放置到该元素中。这个需要配合jquery-ui的drag中的helper函数,返回一个新的拖拽元素集合。(关于jquery-ui的一些事件和属性大家可从网上查阅。不过说得也不尽详细,还需要自己去实验)。

Okay,贴出简单的效果图和代码

                         图一(拖放中效果)

                         图二(释放后效果)

效果图如上,左侧橙色为选中的节点,红色椭圆内部为鼠标拖拽的效果,3表示选中的元素呢个数;右侧的黄色区域表示可以释放和排序的容器。在该区域拖放时,节点会根据鼠标的位置自动排序,如图,如果释放鼠标后,左侧的3个节点就会移动到4.对应的黄色区域。

当然,以上的效果需要去重新给拖拽目标赋予新的元素,并且监听拖拽,释放等时间,编写用户自定义的逻辑。贴出自己的代码,一些事件和属性可以查阅jquery-ui的文档。

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
  <link rel="stylesheet" href="assets/css/bootstrap.css" />
  <link rel="stylesheet" href="js/jquery-ui-1.12.1.dropable/jquery-ui.css" />
  <script src="js/jquery-1.11.2.js"></script>
  <script src="assets/js/bootstrap.js"/>
  <script>
    jQuery.noConflict();  //解决jQuery控制权冲突问题
  </script>
  <script src="js/jquery-ui-1.12.1.dropable/jquery-ui.js"></script>
  <style>


    .selectable .ui-selecting{ background: #FECA40; }
    .selectable .ui-selected{ background: #F39814; color: white; }
    .selectable{ list-style-type: none; margin: 0; padding: 0; width: 80%; }
    .selectable li{
      list-style: none;
      margin: 3px; padding: 0.4em; font-size: 1.4em; height: 32px;moz-user-select: -moz-none;
      -moz-user-select: none;
      -o-user-select:none;
      -khtml-user-select:none;
      -webkit-user-select:none;
      -ms-user-select:none;
      user-select:none;
    }

    .drag_info_box{
      width:40px;
      height:40px;
      text-align: center;
      font-size:14px;
      line-height: 40px;
      background: #21aeff;
      color:#000000;
    }

  </style>
  <script>
    $(function(){


       //自定义多选方法
      var selected_begin_index,selected_end_index;
      $("#mydrag").on("mousedown",".selectable>li",function(e){

        var _selectable= $(this).parent();
        if(!e.ctrlKey && !e.shiftKey){ //没有按下Ctrl或Shift键
          if(!$(this).hasClass("ui-selected")){
            _selectable.children("li").removeClass("ui-selected");
          }
          $(this).addClass("ui-selected");
          selected_begin_index=_selectable.children("li").index(this);

        }else if(e.ctrlKey && !e.shiftKey){ //只按下Ctrl键
          $(this).addClass("ui-selected");
          selected_begin_index=_selectable.children("li").index(this);
        }else if((!e.ctrlKey && e.shiftKey) || (e.ctrlKey && e.shiftKey)){ //只按下Shift键或Ctrl和Shift键都按下
          _selectable.children("li").removeClass("ui-selected");
          $(this).addClass("ui-selected");

          if(selected_begin_index!=undefined){
            selected_end_index=_selectable.children("li").index(this);
          }else{
            selected_begin_index=_selectable.children("li").index(this);
          }

          if(selected_end_index>=selected_begin_index){
            for(var i=selected_begin_index;i<=selected_end_index;i++){
              _selectable.children("li").eq(i).addClass("ui-selected");
            }
          }else{
            for(var i=selected_end_index;i<=selected_begin_index;i++){
              _selectable.children("li").eq(i).addClass("ui-selected");
            }
          }

        }
      }).on("mouseup",".selectable>li",function(e){
        var _selectable= $(this).parent();
        if(!e.ctrlKey && !e.shiftKey){ //没有按下Ctrl或Shift键
          _selectable.children("li").removeClass("ui-selected");
          $(this).addClass("ui-selected");

        }
      });

        //调用拖拽事件并重新规划处理方式
      $("#mydrag .selectable>li").draggable({
        revert: "invalid",
        containment: "document",
        cursor: "default",
        distance:10,
        zIndex:9,
        opacity:0.5,
        cursorAt: {
          left: 20,
          top:40
        },
        connectToSortable:"#mydrag .sample-group>ol",
        helper:function(event,ui){
          var drag_info_box=$("<div></div>").addClass("drag_info_box");
            drag_info_box.append($("<span></span>"));
            drag_info_box.append($('<input type="hidden" />'));
          return drag_info_box;
        },
        start: function( event, ui ) {
          var _drag_ele=ui.helper;
          _drag_ele.children("span").eq(0).text($("#mydrag .selectable>li.ui-selected").length);
          var selected_li_seq="";
          $("#mydrag .selectable>li.ui-selected").each(function(){
            selected_li_seq+= $("#mydrag .selectable>li").index(this)+",";
          });
          _drag_ele.children("input").eq(0).val(selected_li_seq.substr(0,selected_li_seq.length-1));
        },
        stop:function( event, ui ) {
          $(".selectable li").removeClass("ui-selected");
        }
      });


      $("#mydrag .sample-group>ol").droppable({
        activeClass: "ui-state-highlight",
        drop: function( event, ui ) {
          //这块如果是拖放到排序面板会执行两次,将该内容放到排序的stop方法中
        }
      });
        
        //排序完毕后执行真正的释放操作
      $( "#mydrag .sample-group>ol" ).sortable({
        revert: true,
        stop: function( event, ui ) {

          if(ui.item.hasClass("drag_info_box")){
            var selected_li_arr=ui.item.children("input").eq(0).val().split(',');
            for(var i=0;i<selected_li_arr.length;i++){
              var _group_li_=$("<li></li>")
                  .addClass("ui-state-highlight ui-sortable-handle").text($("#mydrag .selectable>li").eq(selected_li_arr[i]).text());
              //为该元素打上上传标签
              $("#mydrag .selectable>li").eq(selected_li_arr[i]).addClass("delete_flag"



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 基于jQuery对象和DOM对象和字符串之间的转化实例
  • jquery+css实现简单的图片轮播效果
  • 使用jQuery实现鼠标点击左右按钮滑动切换
  • jQuery实现上传图片前预览效果功能
  • jQuery初级教程之网站品牌列表效果
  • 基于jquery实现多选下拉列表
  • jQuery接受后台传递的List的实例详解
  • 详解jquery选择器的原理
  • jQuery上传插件webupload使用方法
  • 关于jquery form表单序列化的注意事项详解

相关文章

  • firefox下jquery ajax返回object XMLDocument处理方法
  • 基于HTML+CSS+JS实现增加删除修改tab导航特效代码
  • Jquery升级新版本后选择器的语法问题
  • 基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
  • jquery toggle faq 春江花月夜版
  • jQuery Selectors(选择器)的使用(一、基本篇)
  • jQuery简单实现input文本框内灰色提示文本效果的方法
  • jquery 无限级联菜单案例分享
  • jQuery中Datatables增加跳转到指定页功能
  • JQuery+Ajax实现数据查询、排序和分页功能

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
    • 基于jquery的一个拖拽到指定区域内的效果
    • jQuery实现Flash效果上下翻动的中英文导航菜单代码
    • 基于jquery的防止大图片撑破页面的实现代码(立即缩放)
    • jQuery的实现原理的模拟代码 -3 事件处理
    • jquery Tab 选项卡通用函数
    • JQuery each()嵌套使用小结
    • jquery获得keycode的示例代码
    • Jquery树插件zTree实现菜单树
    • jQuery层级选择器实例代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有