⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dragdrop.js

📁 原名JSPackager
💻 JS
📖 第 1 页 / 共 2 页
字号:
if (this.scrollInterval) {clearInterval(this.scrollInterval);this.scrollInterval = null;Draggables._lastScrollPointer = null;}}, startScrolling:function (speed) {if (!(speed[0] || speed[1])) {return;}this.scrollSpeed = [speed[0] * this.options.scrollSpeed, speed[1] * this.options.scrollSpeed];this.lastScrolled = new Date();this.scrollInterval = setInterval(this.scroll.bind(this), 10);}, scroll:function () {var current = new Date();var delta = current - this.lastScrolled;this.lastScrolled = current;if (this.options.scroll == window) {with (this._getWindowScroll(this.options.scroll)) {if (this.scrollSpeed[0] || this.scrollSpeed[1]) {var d = delta / 1000;this.options.scroll.scrollTo(left + d * this.scrollSpeed[0], top + d * this.scrollSpeed[1]);}}} else {this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000;}Position.prepare();Droppables.show(Draggables._lastPointer, this.element);Draggables.notify("onDrag", this);if (this._isScrollChild) {Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;if (Draggables._lastScrollPointer[0] < 0) {Draggables._lastScrollPointer[0] = 0;}if (Draggables._lastScrollPointer[1] < 0) {Draggables._lastScrollPointer[1] = 0;}this.draw(Draggables._lastScrollPointer);}if (this.options.change) {this.options.change(this);}}, _getWindowScroll:function (w) {var T, L, W, H;with (w.document) {if (w.document.documentElement && documentElement.scrollTop) {T = documentElement.scrollTop;L = documentElement.scrollLeft;} else {if (w.document.body) {T = body.scrollTop;L = body.scrollLeft;}}if (w.innerWidth) {W = w.innerWidth;H = w.innerHeight;} else {if (w.document.documentElement && documentElement.clientWidth) {W = documentElement.clientWidth;H = documentElement.clientHeight;} else {W = body.offsetWidth;H = body.offsetHeight;}}}return {top:T, left:L, width:W, height:H};}};var SortableObserver = Class.create();SortableObserver.prototype = {initialize:function (element, observer) {this.element = $(element);this.observer = observer;this.lastValue = Sortable.serialize(this.element);}, onStart:function () {this.lastValue = Sortable.serialize(this.element);}, onEnd:function () {Sortable.unmark();if (this.lastValue != Sortable.serialize(this.element)) {this.observer(this.element);}}};var Sortable = {SERIALIZE_RULE:/^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/, sortables:{}, _findRootElement:function (element) {while (element.tagName.toUpperCase() != "BODY") {if (element.id && Sortable.sortables[element.id]) {return element;}element = element.parentNode;}}, options:function (element) {element = Sortable._findRootElement($(element));if (!element) {return;}return Sortable.sortables[element.id];}, destroy:function (element) {var s = Sortable.options(element);if (s) {Draggables.removeObserver(s.element);s.droppables.each(function (d) {Droppables.remove(d);});s.draggables.invoke("destroy");delete Sortable.sortables[s.element.id];}}, create:function (element) {element = $(element);var options = Object.extend({element:element, tag:"li", dropOnEmpty:false, tree:false, treeTag:"ul", overlap:"vertical", constraint:"vertical", containment:element, handle:false, only:false, delay:0, hoverclass:null, ghosting:false, scroll:false, scrollSensitivity:20, scrollSpeed:15, format:this.SERIALIZE_RULE, onChange:Prototype.emptyFunction, onUpdate:Prototype.emptyFunction}, arguments[1] || {});this.destroy(element);var options_for_draggable = {revert:true, scroll:options.scroll, scrollSpeed:options.scrollSpeed, scrollSensitivity:options.scrollSensitivity, delay:options.delay, ghosting:options.ghosting, constraint:options.constraint, handle:options.handle};if (options.starteffect) {options_for_draggable.starteffect = options.starteffect;}if (options.reverteffect) {options_for_draggable.reverteffect = options.reverteffect;} else {if (options.ghosting) {options_for_draggable.reverteffect = function (element) {element.style.top = 0;element.style.left = 0;};}}if (options.endeffect) {options_for_draggable.endeffect = options.endeffect;}if (options.zindex) {options_for_draggable.zindex = options.zindex;}var options_for_droppable = {overlap:options.overlap, containment:options.containment, tree:options.tree, hoverclass:options.hoverclass, onHover:Sortable.onHover};var options_for_tree = {onHover:Sortable.onEmptyHover, overlap:options.overlap, containment:options.containment, hoverclass:options.hoverclass};Element.cleanWhitespace(element);options.draggables = [];options.droppables = [];if (options.dropOnEmpty || options.tree) {Droppables.add(element, options_for_tree);options.droppables.push(element);}(this.findElements(element, options) || []).each(function (e) {var handle = options.handle ? $(e).down("." + options.handle, 0) : e;options.draggables.push(new Draggable(e, Object.extend(options_for_draggable, {handle:handle})));Droppables.add(e, options_for_droppable);if (options.tree) {e.treeNode = element;}options.droppables.push(e);});if (options.tree) {(Sortable.findTreeElements(element, options) || []).each(function (e) {Droppables.add(e, options_for_tree);e.treeNode = element;options.droppables.push(e);});}this.sortables[element.id] = options;Draggables.addObserver(new SortableObserver(element, options.onUpdate));}, findElements:function (element, options) {return Element.findChildren(element, options.only, options.tree ? true : false, options.tag);}, findTreeElements:function (element, options) {return Element.findChildren(element, options.only, options.tree ? true : false, options.treeTag);}, onHover:function (element, dropon, overlap) {if (Element.isParent(dropon, element)) {return;}if (overlap > 0.33 && overlap < 0.66 && Sortable.options(dropon).tree) {return;} else {if (overlap > 0.5) {Sortable.mark(dropon, "before");if (dropon.previousSibling != element) {var oldParentNode = element.parentNode;element.style.visibility = "hidden";dropon.parentNode.insertBefore(element, dropon);if (dropon.parentNode != oldParentNode) {Sortable.options(oldParentNode).onChange(element);}Sortable.options(dropon.parentNode).onChange(element);}} else {Sortable.mark(dropon, "after");var nextElement = dropon.nextSibling || null;if (nextElement != element) {var oldParentNode = element.parentNode;element.style.visibility = "hidden";dropon.parentNode.insertBefore(element, nextElement);if (dropon.parentNode != oldParentNode) {Sortable.options(oldParentNode).onChange(element);}Sortable.options(dropon.parentNode).onChange(element);}}}}, onEmptyHover:function (element, dropon, overlap) {var oldParentNode = element.parentNode;var droponOptions = Sortable.options(dropon);if (!Element.isParent(dropon, element)) {var index;var children = Sortable.findElements(dropon, {tag:droponOptions.tag, only:droponOptions.only});var child = null;if (children) {var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1 - overlap);for (index = 0; index < children.length; index += 1) {if (offset - Element.offsetSize(children[index], droponOptions.overlap) >= 0) {offset -= Element.offsetSize(children[index], droponOptions.overlap);} else {if (offset - (Element.offsetSize(children[index], droponOptions.overlap) / 2) >= 0) {child = index + 1 < children.length ? children[index + 1] : null;break;} else {child = children[index];break;}}}}dropon.insertBefore(element, child);Sortable.options(oldParentNode).onChange(element);droponOptions.onChange(element);}}, unmark:function () {if (Sortable._marker) {Sortable._marker.hide();}}, mark:function (dropon, position) {var sortable = Sortable.options(dropon.parentNode);if (sortable && !sortable.ghosting) {return;}if (!Sortable._marker) {Sortable._marker = ($("dropmarker") || Element.extend(document.createElement("DIV"))).hide().addClassName("dropmarker").setStyle({position:"absolute"});document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);}var offsets = Position.cumulativeOffset(dropon);Sortable._marker.setStyle({left:offsets[0] + "px", top:offsets[1] + "px"});if (position == "after") {if (sortable.overlap == "horizontal") {Sortable._marker.setStyle({left:(offsets[0] + dropon.clientWidth) + "px"});} else {Sortable._marker.setStyle({top:(offsets[1] + dropon.clientHeight) + "px"});}}Sortable._marker.show();}, _tree:function (element, options, parent) {var children = Sortable.findElements(element, options) || [];for (var i = 0; i < children.length; ++i) {var match = children[i].id.match(options.format);if (!match) {continue;}var child = {id:encodeURIComponent(match ? match[1] : null), element:element, parent:parent, children:[], position:parent.children.length, container:$(children[i]).down(options.treeTag)};if (child.container) {this._tree(child.container, options, child);}parent.children.push(child);}return parent;}, tree:function (element) {element = $(element);var sortableOptions = this.options(element);var options = Object.extend({tag:sortableOptions.tag, treeTag:sortableOptions.treeTag, only:sortableOptions.only, name:element.id, format:sortableOptions.format}, arguments[1] || {});var root = {id:null, parent:null, children:[], container:element, position:0};return Sortable._tree(element, options, root);}, _constructIndex:function (node) {var index = "";do {if (node.id) {index = "[" + node.position + "]" + index;}} while ((node = node.parent) != null);return index;}, sequence:function (element) {element = $(element);var options = Object.extend(this.options(element), arguments[1] || {});return $(this.findElements(element, options) || []).map(function (item) {return item.id.match(options.format) ? item.id.match(options.format)[1] : "";});}, setSequence:function (element, new_sequence) {element = $(element);var options = Object.extend(this.options(element), arguments[2] || {});var nodeMap = {};this.findElements(element, options).each(function (n) {if (n.id.match(options.format)) {nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];}n.parentNode.removeChild(n);});new_sequence.each(function (ident) {var n = nodeMap[ident];if (n) {n[1].appendChild(n[0]);delete nodeMap[ident];}});}, serialize:function (element) {element = $(element);var options = Object.extend(Sortable.options(element), arguments[1] || {});var name = encodeURIComponent((arguments[1] && arguments[1].name) ? arguments[1].name : element.id);if (options.tree) {return Sortable.tree(element, arguments[1]).children.map(function (item) {return [name + Sortable._constructIndex(item) + "[id]=" + encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));}).flatten().join("&");} else {return Sortable.sequence(element, arguments[1]).map(function (item) {return name + "[]=" + encodeURIComponent(item);}).join("&");}}};Element.isParent = function (child, element) {if (!child.parentNode || child == element) {return false;}if (child.parentNode == element) {return true;}return Element.isParent(child.parentNode, element);};Element.findChildren = function (element, only, recursive, tagName) {if (!element.hasChildNodes()) {return null;}tagName = tagName.toUpperCase();if (only) {only = [only].flatten();}var elements = [];$A(element.childNodes).each(function (e) {if (e.tagName && e.tagName.toUpperCase() == tagName && (!only || (Element.classNames(e).detect(function (v) {return only.include(v);})))) {elements.push(e);}if (recursive) {var grandchildren = Element.findChildren(e, only, recursive, tagName);if (grandchildren) {elements.push(grandchildren);}}});return (elements.length > 0 ? elements.flatten() : []);};Element.offsetSize = function (element, type) {return element["offset" + ((type == "vertical" || type == "height") ? "Height" : "Width")];};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -