拖拽插件jquery.dad.js
带删除功能:
<!DOCTYPE html>
<html>
<head> <meta charset="UTF-8"> <title>拖拽插件jquery.dad.js</title> <style type="text/css">.dad-noSelect,.dad-noSelect *{-webkit-touch-callout: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;cursor: -webkit-grabbing !important;cursor: -moz-grabbing !important;}.dad-container{position: relative;-webkit-touch-callout: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;}.dad-container::after{content: '';clear: both !important;display: block;}.dad-active .dad-draggable-area{cursor: -webkit-grab;cursor: -moz-grab;}.dad-draggable-area>*,.dad-draggable-area img{pointer-events: none;}.dads-children.active{pointer-events: none;}.dads-children-clone{opacity: 1;z-index: 9999;pointer-events: none;}.dads-children-placeholder{pointer-events: none;overflow: hidden;position: absolute !important;box-sizing: border-box;border:4px dashed #639BF6;margin:5px;text-align: center;color: #639BF6;font-weight: bold;} .daddy>div {box-sizing: border-box;width: 20%;padding: 5px;float: left;display: block;position: relative;}.daddy>div>div {display: block;height: 120px;line-height: 120px;text-align: center;font-size: 30px;font-weight: bold;background: #639BF6;color: white;font-family: "Arial", sans-serif;}.m-delete{pointer-events: auto;}</style>
</head>
<body>
ccs文件和js文件可以去GitHub上下载,下载地址是:https://github.com/williammustaffa/jquery.dad.js
本实例是直接把源代码都复制过来了<div id="daddy" class="dad daddy"><div><div>1</div><input type="button" value="删除" class="m-delete js-delete"></div><div><div>2</div><input type="button" value="删除" class="m-delete js-delete"></div><div><div>3</div><input type="button" value="删除" class="m-delete js-delete"></div><div><div>4</div><input type="button" value="删除" class="m-delete js-delete"></div><div><div>5</div><input type="button" value="删除" class="m-delete js-delete"></div></div><script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script> <!-- <script src='jquery.dad.js'></script> --><script type="text/javascript">/*!* jquery.dad.js v1 (http://konsolestudio.com/dad)* Author William Lima*/(function ($) {'use strict';var supportsTouch = 'ontouchstart' in window || navigator.msMaxTouchPoints;$.fn.dad = function (opts) {var _this = this;var defaults = {target: '>div',draggable: false,placeholder: '',callback: false,containerClass: 'dad-container',childrenClass: 'dads-children',cloneClass: 'dads-children-clone',active: true,};var options = $.extend({}, defaults, opts);$(this).each(function () {var active = options.active;var $daddy = $(this);var childrenClass = options.childrenClass;var cloneClass = options.cloneClass;var jQclass = '.' + childrenClass;var $target = $daddy.find(options.target);var placeholder = options.placeholder;var callback = options.callback;var dragClass = 'dad-draggable-area';var holderClass = 'dads-children-placeholder';// HANDLE MOUSEvar mouse = {x: 0,y: 0,target: false,clone: false,placeholder: false,cloneoffset: {x: 0,y: 0,},updatePosition: function (e) {this.x = e.pageX;this.y = e.pageY;},move: function (e) {this.updatePosition(e);if (this.clone !== false && _this.target !== false) {this.clone.css({left: this.x - this.cloneoffset.x,top: this.y - this.cloneoffset.y,});}},};$(window).on('mousemove touchmove', function (e) {var ev = e;if (mouse.clone !== false && mouse.target !== false) e.preventDefault();if (supportsTouch && e.type == 'touchmove') {ev = e.originalEvent.touches[0];var mouseTarget = document.elementFromPoint(ev.clientX, ev.clientY);$(mouseTarget).trigger('touchenter');}mouse.move(ev);});$daddy.addClass(options.containerClass);if (!$daddy.hasClass('dad-active') && active === true) {$daddy.addClass('dad-active');};_this.addDropzone = function (selector, func) {$(selector).on('mouseenter touchenter', function () {if (mouse.target !== false) {mouse.placeholder.css({ display: 'none' });mouse.target.css({ display: 'none' });$(this).addClass('active');}}).on('mouseup touchend', function () {if (mouse.target != false) {mouse.placeholder.css({ display: 'block' });mouse.target.css({ display: 'block' });func(mouse.target);dadEnd();};$(this).removeClass('active');}).on('mouseleave touchleave', function () {if (mouse.target !== false) {mouse.placeholder.css({ display: 'block' });mouse.target.css({ display: 'block' });}$(this).removeClass('active');});};// GET POSITION FUNCTION_this.getPosition = function () {var positionArray = [];$(this).find(jQclass).each(function () {positionArray[$(this).attr('data-dad-id')] = parseInt($(this).attr('data-dad-position'));});return positionArray;};_this.activate = function () {active = true;if (!$daddy.hasClass('dad-active')) {$daddy.addClass('dad-active');}return _this;};// DEACTIVATE FUNCTION_this.deactivate = function () {active = false;$daddy.removeClass('dad-active');return _this;};// DEFAULT DROPPING$daddy.on('DOMNodeInserted', function (e) {var $thisTarget = $(e.target);if (!$thisTarget.hasClass(childrenClass) && !$thisTarget.hasClass(holderClass)) {$thisTarget.addClass(childrenClass);}});$(document).on('mouseup touchend', function () {dadEnd();});// ORDER ELEMENTSvar order = 1;$target.addClass(childrenClass).each(function () {if ($(this).data('dad-id') == undefined) {$(this).attr('data-dad-id', order);}$(this).attr('data-dad-position', order);order++;});// CREATE REORDER FUNCTIONfunction updatePosition(e) {var order = 1;e.find(jQclass).each(function () {$(this).attr('data-dad-position', order);order++;});}// END EVENTfunction dadEnd() {if (mouse.target != false && mouse.clone != false) {if (callback != false) {callback(mouse.target);}var appear = mouse.target;var desappear = mouse.clone;var holder = mouse.placeholder;var bLeft = 0;var bTop = 0;// Maybe we will use this in the future//Math.floor(parseFloat($daddy.css('border-left-width')));//Math.floor(parseFloat($daddy.css('border-top-width')));if ($.contains($daddy[0], mouse.target[0])) {mouse.clone.animate({top: mouse.target.offset().top - $daddy.offset().top - bTop,left: mouse.target.offset().left - $daddy.offset().left - bLeft,}, 300, function () {appear.css({visibility: 'visible',}).removeClass('active');desappear.remove();});} else {mouse.clone.fadeOut(300, function () {desappear.remove();});}holder.remove();mouse.clone = false;mouse.placeholder = false;mouse.target = false;updatePosition($daddy);}$('html, body').removeClass('dad-noSelect');}// UPDATE EVENTfunction dadUpdate(obj) {if (mouse.target !== false && mouse.clone !== false) {var $origin = $('<span style="display:none"></span>');var $newplace = $('<span style="display:none"></span>');if (obj.prevAll().hasClass('active')) {obj.after($newplace);} else {obj.before($newplace);}mouse.target.before($origin);$newplace.before(mouse.target);// UPDATE PLACEHOLDERmouse.placeholder.css({top: mouse.target.offset().top - $daddy.offset().top,left: mouse.target.offset().left - $daddy.offset().left,width: mouse.target.outerWidth() - 10,height: mouse.target.outerHeight() - 10,});$origin.remove();$newplace.remove();}}// GRABBING EVENTvar jq = (options.draggable !== false) ? options.draggable : jQclass;$daddy.find(jq).addClass(dragClass);$daddy.on('mousedown touchstart', jq, function (e) {var isDelete = $(e.target).hasClass('js-delete');if(isDelete) {return;}// For touchstart we must update "mouse" positionif (e.type == 'touchstart') {mouse.updatePosition(e.originalEvent.touches[0]);}if (mouse.target == false && active == true && (e.which == 1 || e.type == 'touchstart')) {var $self = $(this);// GET TARGETif (options.draggable !== false) {mouse.target = $daddy.find(jQclass).has(this);} else {mouse.target = $self;}// ADD CLONEmouse.clone = mouse.target.clone();mouse.target.css({ visibility: 'hidden' }).addClass('active');mouse.clone.addClass(cloneClass);$daddy.append(mouse.clone);// ADD PLACEHOLDERvar $placeholder = $('<div></div>');mouse.placeholder = $placeholder;mouse.placeholder.addClass(holderClass);mouse.placeholder.css({top: mouse.target.offset().top - $daddy.offset().top,left: mouse.target.offset().left - $daddy.offset().left,width: mouse.target.outerWidth() - 10,height: mouse.target.outerHeight() - 10,lineHeight: mouse.target.height() - 18 + 'px',textAlign: 'center',}).text(placeholder);$daddy.append(mouse.placeholder);// GET OFFSET FOR CLONEvar bLeft = Math.floor(parseFloat($daddy.css('border-left-width')));var bTop = Math.floor(parseFloat($daddy.css('border-top-width')));var difx = mouse.x - mouse.target.offset().left + $daddy.offset().left + bLeft;var dify = mouse.y - mouse.target.offset().top + $daddy.offset().top + bTop;mouse.cloneoffset.x = difx;mouse.cloneoffset.y = dify;// REMOVE THE CHILDREN DAD CLASS AND SET THE POSITION ON SCREENmouse.clone.removeClass(childrenClass).css({position: 'absolute',top: mouse.y - mouse.cloneoffset.y,left: mouse.x - mouse.cloneoffset.x,});// UNABLE THE TEXT SELECTION AND SET THE GRAB CURSOR$('html,body').addClass('dad-noSelect');}});$daddy.on('mouseenter touchenter', jQclass, function () {dadUpdate($(this));});});return this;};})(jQuery); </script> <script type="text/javascript"> $(function () {var myAction = {};var dom = {dad: $('#daddy'),delete: $('.js-delete')}$.extend(myAction, {initDad: function () {dom.dad.dad();},initEvent: function () {dom.delete.on('click', function () {var that = $(this);that.parent().remove();}); }});var init = function () {myAction.initDad();myAction.initEvent();}();}); </script>
</body>
</html>
不带删除功能:
<!DOCTYPE html>
<html>
<head> <meta charset="UTF-8"> <title>拖拽插件jquery.dad.js</title> <style type="text/css">.dad-noSelect,.dad-noSelect *{-webkit-touch-callout: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;cursor: -webkit-grabbing !important;cursor: -moz-grabbing !important;}.dad-container{position: relative;-webkit-touch-callout: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;}.dad-container::after{content: '';clear: both !important;display: block;}.dad-active .dad-draggable-area{cursor: -webkit-grab;cursor: -moz-grab;}.dad-draggable-area>*,.dad-draggable-area img{pointer-events: none;}.dads-children.active{pointer-events: none;}.dads-children-clone{opacity: 1;z-index: 9999;pointer-events: none;}.dads-children-placeholder{pointer-events: none;overflow: hidden;position: absolute !important;box-sizing: border-box;border:4px dashed #639BF6;margin:5px;text-align: center;color: #639BF6;font-weight: bold;} .daddy>div {box-sizing: border-box;width: 20%;padding: 5px;float: left;display: block;position: relative;}.daddy>div>div {display: block;height: 120px;line-height: 120px;text-align: center;font-size: 30px;font-weight: bold;background: #639BF6;color: white;font-family: "Arial", sans-serif;}</style>
</head>
<body>
ccs文件和js文件可以去GitHub上下载,下载地址是:https://github.com/williammustaffa/jquery.dad.js
本实例是直接把源代码都复制过来了<div id="daddy" class="dad daddy"><div><div>1</div></div><div><div>2</div></div><div><div>3</div></div><div><div>4</div></div><div><div>5</div></div></div><script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script> <!-- <script src='jquery.dad.js'></script> --><script type="text/javascript">/*!* jquery.dad.js v1 (http://konsolestudio.com/dad)* Author William Lima*/(function ($) {'use strict';var supportsTouch = 'ontouchstart' in window || navigator.msMaxTouchPoints;$.fn.dad = function (opts) {var _this = this;var defaults = {target: '>div',draggable: false,placeholder: '',callback: false,containerClass: 'dad-container',childrenClass: 'dads-children',cloneClass: 'dads-children-clone',active: true,};var options = $.extend({}, defaults, opts);$(this).each(function () {var active = options.active;var $daddy = $(this);var childrenClass = options.childrenClass;var cloneClass = options.cloneClass;var jQclass = '.' + childrenClass;var $target = $daddy.find(options.target);var placeholder = options.placeholder;var callback = options.callback;var dragClass = 'dad-draggable-area';var holderClass = 'dads-children-placeholder';// HANDLE MOUSEvar mouse = {x: 0,y: 0,target: false,clone: false,placeholder: false,cloneoffset: {x: 0,y: 0,},updatePosition: function (e) {this.x = e.pageX;this.y = e.pageY;},move: function (e) {this.updatePosition(e);if (this.clone !== false && _this.target !== false) {this.clone.css({left: this.x - this.cloneoffset.x,top: this.y - this.cloneoffset.y,});}},};$(window).on('mousemove touchmove', function (e) {var ev = e;if (mouse.clone !== false && mouse.target !== false) e.preventDefault();if (supportsTouch && e.type == 'touchmove') {ev = e.originalEvent.touches[0];var mouseTarget = document.elementFromPoint(ev.clientX, ev.clientY);$(mouseTarget).trigger('touchenter');}mouse.move(ev);});$daddy.addClass(options.containerClass);if (!$daddy.hasClass('dad-active') && active === true) {$daddy.addClass('dad-active');};_this.addDropzone = function (selector, func) {$(selector).on('mouseenter touchenter', function () {if (mouse.target !== false) {mouse.placeholder.css({ display: 'none' });mouse.target.css({ display: 'none' });$(this).addClass('active');}}).on('mouseup touchend', function () {if (mouse.target != false) {mouse.placeholder.css({ display: 'block' });mouse.target.css({ display: 'block' });func(mouse.target);dadEnd();};$(this).removeClass('active');}).on('mouseleave touchleave', function () {if (mouse.target !== false) {mouse.placeholder.css({ display: 'block' });mouse.target.css({ display: 'block' });}$(this).removeClass('active');});};// GET POSITION FUNCTION_this.getPosition = function () {var positionArray = [];$(this).find(jQclass).each(function () {positionArray[$(this).attr('data-dad-id')] = parseInt($(this).attr('data-dad-position'));});return positionArray;};_this.activate = function () {active = true;if (!$daddy.hasClass('dad-active')) {$daddy.addClass('dad-active');}return _this;};// DEACTIVATE FUNCTION_this.deactivate = function () {active = false;$daddy.removeClass('dad-active');return _this;};// DEFAULT DROPPING$daddy.on('DOMNodeInserted', function (e) {var $thisTarget = $(e.target);if (!$thisTarget.hasClass(childrenClass) && !$thisTarget.hasClass(holderClass)) {$thisTarget.addClass(childrenClass);}});$(document).on('mouseup touchend', function () {dadEnd();});// ORDER ELEMENTSvar order = 1;$target.addClass(childrenClass).each(function () {if ($(this).data('dad-id') == undefined) {$(this).attr('data-dad-id', order);}$(this).attr('data-dad-position', order);order++;});// CREATE REORDER FUNCTIONfunction updatePosition(e) {var order = 1;e.find(jQclass).each(function () {$(this).attr('data-dad-position', order);order++;});}// END EVENTfunction dadEnd() {if (mouse.target != false && mouse.clone != false) {if (callback != false) {callback(mouse.target);}var appear = mouse.target;var desappear = mouse.clone;var holder = mouse.placeholder;var bLeft = 0;var bTop = 0;// Maybe we will use this in the future//Math.floor(parseFloat($daddy.css('border-left-width')));//Math.floor(parseFloat($daddy.css('border-top-width')));if ($.contains($daddy[0], mouse.target[0])) {mouse.clone.animate({top: mouse.target.offset().top - $daddy.offset().top - bTop,left: mouse.target.offset().left - $daddy.offset().left - bLeft,}, 300, function () {appear.css({visibility: 'visible',}).removeClass('active');desappear.remove();});} else {mouse.clone.fadeOut(300, function () {desappear.remove();});}holder.remove();mouse.clone = false;mouse.placeholder = false;mouse.target = false;updatePosition($daddy);}$('html, body').removeClass('dad-noSelect');}// UPDATE EVENTfunction dadUpdate(obj) {if (mouse.target !== false && mouse.clone !== false) {var $origin = $('<span style="display:none"></span>');var $newplace = $('<span style="display:none"></span>');if (obj.prevAll().hasClass('active')) {obj.after($newplace);} else {obj.before($newplace);}mouse.target.before($origin);$newplace.before(mouse.target);// UPDATE PLACEHOLDERmouse.placeholder.css({top: mouse.target.offset().top - $daddy.offset().top,left: mouse.target.offset().left - $daddy.offset().left,width: mouse.target.outerWidth() - 10,height: mouse.target.outerHeight() - 10,});$origin.remove();$newplace.remove();}}// GRABBING EVENTvar jq = (options.draggable !== false) ? options.draggable : jQclass;$daddy.find(jq).addClass(dragClass);$daddy.on('mousedown touchstart', jq, function (e) {// For touchstart we must update "mouse" positionif (e.type == 'touchstart') {mouse.updatePosition(e.originalEvent.touches[0]);}if (mouse.target == false && active == true && (e.which == 1 || e.type == 'touchstart')) {var $self = $(this);// GET TARGETif (options.draggable !== false) {mouse.target = $daddy.find(jQclass).has(this);} else {mouse.target = $self;}// ADD CLONEmouse.clone = mouse.target.clone();mouse.target.css({ visibility: 'hidden' }).addClass('active');mouse.clone.addClass(cloneClass);$daddy.append(mouse.clone);// ADD PLACEHOLDERvar $placeholder = $('<div></div>');mouse.placeholder = $placeholder;mouse.placeholder.addClass(holderClass);mouse.placeholder.css({top: mouse.target.offset().top - $daddy.offset().top,left: mouse.target.offset().left - $daddy.offset().left,width: mouse.target.outerWidth() - 10,height: mouse.target.outerHeight() - 10,lineHeight: mouse.target.height() - 18 + 'px',textAlign: 'center',}).text(placeholder);$daddy.append(mouse.placeholder);// GET OFFSET FOR CLONEvar bLeft = Math.floor(parseFloat($daddy.css('border-left-width')));var bTop = Math.floor(parseFloat($daddy.css('border-top-width')));var difx = mouse.x - mouse.target.offset().left + $daddy.offset().left + bLeft;var dify = mouse.y - mouse.target.offset().top + $daddy.offset().top + bTop;mouse.cloneoffset.x = difx;mouse.cloneoffset.y = dify;// REMOVE THE CHILDREN DAD CLASS AND SET THE POSITION ON SCREENmouse.clone.removeClass(childrenClass).css({position: 'absolute',top: mouse.y - mouse.cloneoffset.y,left: mouse.x - mouse.cloneoffset.x,});// UNABLE THE TEXT SELECTION AND SET THE GRAB CURSOR$('html,body').addClass('dad-noSelect');}});$daddy.on('mouseenter touchenter', jQclass, function () {dadUpdate($(this));});});return this;};})(jQuery); </script> <script type="text/javascript"> $(function () {//dad simple demo$('.dad').dad();}); </script>
</body>
</html>
备注:欢迎加入web前端求职招聘qq群:668352707
转载于:https://www.cnblogs.com/xutongbao/p/9924881.html
拖拽插件jquery.dad.js相关推荐
- html5 div拖拽插件,div拖拽插件——JQ.MoveBox.js(自制JQ插件)
有一段时间没更新博客了,都不知道忙些什么,学习也没什么进展,惭愧. 这一周空闲的时间学着自己写一下JQ插件. 以前用原生的JS做过类似拖拽div的效果,现在按原思路改做成一个JQ的小插件,当作制作JQ ...
- html5div拖拽插件,jquery+html5多文件拖放上传插件jquery.filer
jquery.filer是一个简单的HTML5文件上传插件工具,彻底改变jQuery文件输入并使其支持同时选择多个文件,支持拖放,上传验证文件.大小.后缀名,显示缩略图,自定义上传类型图标,即时上传, ...
- 【组件】前端js拖拽插件 VUE
[组件]前端js拖拽插件 VUE Vue Draggable - Vue 拖拽组件王者 Vue drag resize - 轻量级,无依赖,可缩放 Vue smooth dnd - 简单动效,上下拖拽 ...
- js 拖拽生成html,js拖拽插件 js 拖拽控件生成自定义表单 怎么实现
想请教一个js的问题,拖拽控件 js 拖拽控件生成自定义表单 怎么实现 说说步骤吧 监听mousedown事件 - 获取鼠标点击元素,判断是否可拖拽 - 设置flag做标记 - 建一个tempDOM, ...
- sortable 拖拽时互换目标的位置_双端通用型JS拖拽插件的封装与应用
最近工作中遇到一个需求,需要将一个元素从某位置拖动到另一固定位置后执行某一交互行为,具体效果如下: 这个看似简单的需求,然而实现起来却并不那么顺利.我首先想到的是如何通过哪个现有的插件来快速解决这个问 ...
- ajax 批量上传图片插件,jQuery多文件上传插件jquery.imageuploader.js
插件描述:jQuery多文件上传插件jquery.imageuploader.js,可以同时上传多个文件并支持拖拽上传 jquery.imageuploader.js 一款jquery多文件上传插件. ...
- java se拖动插件_JQuery之拖拽插件实现代码
而很多页面效果都要用到这些位置.不得已,得练练,得记记. 下面就来说说这个基于 JQuery的简易拖拽插件吧. 按惯例,先说说拖拽的原理,以及搞这么一个东东的步骤: 那什么是拖拽呢? 看名字就知道了: ...
- java se拖动插件_JQuery之拖拽插件
Jeremy - DragDrop Test !(function($) { $.extend({//获取鼠标当前坐标mouseCoords:function(ev){if(ev.pageX||ev. ...
- jQuery插件 -- Cookie插件jquery.cookie.js(转)
2019独角兽企业重金招聘Python工程师标准>>> jQuery插件 -- Cookie插件jquery.cookie.js(转) Cookie是网站设计者放置在客户端的小文本文 ...
最新文章
- Lync2013与Exchange2013集成先决条件(十九)
- java离职交接文档_离职了就没责任?会计离职没办这2项交接,要承担法律责任!...
- spring事务介绍
- python datetime 加一个月_Python 如何计算当前时间减少或增加一个月
- 将指定的计数添加到信号量中会导致其超过_从烷烃中分离烯烃、从原油中分离碳氢化合物…这七大化学分离过程将影响世界...
- 草莓软件验证系统源码 附带易语言模块
- Java关键字(六)——super
- MySQL在远程访问时非常慢的解决skip-name-resolve
- 在python中类型属于对象变量是没有类型的_如何理解python对象有类型,变量无类型...
- 搭建自己的GIT服务器
- 【转】在Ubuntu上下载、编译和安装Android最新源代码
- 【蓝桥结果填空】:时间显示
- opencv 实现角点检测 Shi-Tomasi角点检测
- java jvm dump文件_各种获取JVM DUMP的方法
- java.lang.UnsupportedOperationException: Required method instantiateItem was not overridden
- Mysql设计层优化整理总结
- 让孩子更快乐地学编程,一套积木就够了,长毛象AI百变编程积木套件体验
- java后台框架 springmvc mybaits 集代码生成器 SSM SSH
- 二级计算机vb答案,计算机二级VB考试练习题及答案
- css3文字炫彩电音效果