摘要:本篇教程通过代码讲解了一个jQuery的拖动排序插件,希望阅读本篇文章以后大家有所收获,帮助大家对jQuery的理解更加深入。
(function($) { 'use strict'; $.fn.dragSort = function(options) { var settings = $.extend(true, { targetEle: 'li', replaceStyle: { 'background-color': '#f9f9f9', 'border': '1px dashed #ddd' }, dragStyle: { 'position': 'fixed', 'box-shadow': '10px 10px 20px 0 #eee' } }, options); return this.each(function() { // 由于有些浏览器的图片和链接是默认可以拖动的,所以屏蔽掉document的dragstart事件 document.ondragstart = function() { return false; } var thisEle = $(this); thisEle.on('mousedown.dragSort', settings.targetEle, function(event) { var selfEle = $(this); // 只允许鼠标左键拖动 if(event.which !== 1) { return; } // 禁止在表单元素里面拖动 var tagName = event.target.tagName.toUpperCase(); if(tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') { return; } var moveEle = $(this); var offset = selfEle.offset(); var rangeX = event.pageX - offset.left; var rangeY = event.pageY - offset.top; var replaceEle = selfEle.clone() .css('height', selfEle.outerHeight()) .css(settings.replaceStyle) .empty(); settings.dragStyle.width = selfEle.width(); var move = true; $(document).on('mousemove.dragSort', function(event) { if (move) { moveEle.before(replaceEle).css(settings.dragStyle).appendTo(moveEle.parent()); move = false; } var thisOuterHeight = moveEle.outerHeight(); // 滚动条的位置 var scrollTop = $(document).scrollTop(); var scrollLeft = $(document).scrollLeft(); var moveLeft = event.pageX - rangeX - scrollLeft; var moveTop = event.pageY - rangeY - scrollTop; var prevEle = replaceEle.prev(); var nextEle = replaceEle.next().not(moveEle); moveEle.css({ left: moveLeft, top: moveTop }); // 向上排序 if (prevEle.length > 0 && moveTop + scrollTop < prevEle.offset().top + prevEle.outerHeight() / 2) { replaceEle.after(prevEle); //向下排序 } else if (nextEle.length > 0 && moveTop + scrollTop > nextEle.offset().top - nextEle.outerHeight() / 2) { replaceEle.before(nextEle); } }); $(document).on('mouseup.dragSort', function(event) { $(document).off('mousemove.dragSort mouseup.dragSort') if (!move) { replaceEle.before(moveEle.removeAttr('style')).remove(); } }); }); }); }; })(jQuery)
用法:
$('#wrap').dragSort();
本文由职坐标整理发布,学习更多的jQuery相关知识,请关注职坐标WEB前端jQuery频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号