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

📄 dragdrop.js

📁 SugarCRM5.1 开源PHP客户关系管理系统
💻 JS
📖 第 1 页 / 共 5 页
字号:
     * drop target     * @method onInvalidDrop     * @param {Event} e the mouseup event     */    onInvalidDrop: function(e) { /* override this */ },    /**     * Code that executes immediately before the endDrag event     * @method b4EndDrag     * @private     */    b4EndDrag: function(e) { },    /**     * Fired when we are done dragging the object     * @method endDrag     * @param {Event} e the mouseup event     */    endDrag: function(e) { /* override this */ },    /**     * Code executed immediately before the onMouseDown event     * @method b4MouseDown     * @param {Event} e the mousedown event     * @private     */    b4MouseDown: function(e) {  },    /**     * Event handler that fires when a drag/drop obj gets a mousedown     * @method onMouseDown     * @param {Event} e the mousedown event     */    onMouseDown: function(e) { /* override this */ },    /**     * Event handler that fires when a drag/drop obj gets a mouseup     * @method onMouseUp     * @param {Event} e the mouseup event     */    onMouseUp: function(e) { /* override this */ },       /**     * Override the onAvailable method to do what is needed after the initial     * position was determined.     * @method onAvailable     */    onAvailable: function () {     },    /**     * Returns a reference to the linked element     * @method getEl     * @return {HTMLElement} the html element      */    getEl: function() {         if (!this._domRef) {            this._domRef = Dom.get(this.id);         }        return this._domRef;    },    /**     * Returns a reference to the actual element to drag.  By default this is     * the same as the html element, but it can be assigned to another      * element. An example of this can be found in YAHOO.util.DDProxy     * @method getDragEl     * @return {HTMLElement} the html element      */    getDragEl: function() {        return Dom.get(this.dragElId);    },    /**     * Sets up the DragDrop object.  Must be called in the constructor of any     * YAHOO.util.DragDrop subclass     * @method init     * @param id the id of the linked element     * @param {String} sGroup the group of related items     * @param {object} config configuration attributes     */    init: function(id, sGroup, config) {        this.initTarget(id, sGroup, config);        Event.on(this.id, "mousedown", this.handleMouseDown, this, true);        // Event.on(this.id, "selectstart", Event.preventDefault);    },    /**     * Initializes Targeting functionality only... the object does not     * get a mousedown handler.     * @method initTarget     * @param id the id of the linked element     * @param {String} sGroup the group of related items     * @param {object} config configuration attributes     */    initTarget: function(id, sGroup, config) {        // configuration attributes         this.config = config || {};        // create a local reference to the drag and drop manager        this.DDM = YAHOO.util.DDM;        // initialize the groups array        this.groups = {};        // assume that we have an element reference instead of an id if the        // parameter is not a string        if (typeof id !== "string") {            YAHOO.log("id is not a string, assuming it is an HTMLElement");            id = Dom.generateId(id);        }        // set the id        this.id = id;        // add to an interaction group        this.addToGroup((sGroup) ? sGroup : "default");        // We don't want to register this as the handle with the manager        // so we just set the id rather than calling the setter.        this.handleElId = id;        Event.onAvailable(id, this.handleOnAvailable, this, true);        // the linked element is the element that gets dragged by default        this.setDragElId(id);         // by default, clicked anchors will not start drag operations.         // @TODO what else should be here?  Probably form fields.        this.invalidHandleTypes = { A: "A" };        this.invalidHandleIds = {};        this.invalidHandleClasses = [];        this.applyConfig();    },    /**     * Applies the configuration parameters that were passed into the constructor.     * This is supposed to happen at each level through the inheritance chain.  So     * a DDProxy implentation will execute apply config on DDProxy, DD, and      * DragDrop in order to get all of the parameters that are available in     * each object.     * @method applyConfig     */    applyConfig: function() {        // configurable properties:         //    padding, isTarget, maintainOffset, primaryButtonOnly        this.padding           = this.config.padding || [0, 0, 0, 0];        this.isTarget          = (this.config.isTarget !== false);        this.maintainOffset    = (this.config.maintainOffset);        this.primaryButtonOnly = (this.config.primaryButtonOnly !== false);    },    /**     * Executed when the linked element is available     * @method handleOnAvailable     * @private     */    handleOnAvailable: function() {        this.available = true;        this.resetConstraints();        this.onAvailable();    },     /**     * Configures the padding for the target zone in px.  Effectively expands     * (or reduces) the virtual object size for targeting calculations.       * Supports css-style shorthand; if only one parameter is passed, all sides     * will have that padding, and if only two are passed, the top and bottom     * will have the first param, the left and right the second.     * @method setPadding     * @param {int} iTop    Top pad     * @param {int} iRight  Right pad     * @param {int} iBot    Bot pad     * @param {int} iLeft   Left pad     */    setPadding: function(iTop, iRight, iBot, iLeft) {        // this.padding = [iLeft, iRight, iTop, iBot];        if (!iRight && 0 !== iRight) {            this.padding = [iTop, iTop, iTop, iTop];        } else if (!iBot && 0 !== iBot) {            this.padding = [iTop, iRight, iTop, iRight];        } else {            this.padding = [iTop, iRight, iBot, iLeft];        }    },    /**     * Stores the initial placement of the linked element.     * @method setInitialPosition     * @param {int} diffX   the X offset, default 0     * @param {int} diffY   the Y offset, default 0     */    setInitPosition: function(diffX, diffY) {        var el = this.getEl();        if (!this.DDM.verifyEl(el)) {            return;        }        var dx = diffX || 0;        var dy = diffY || 0;        var p = Dom.getXY( el );        this.initPageX = p[0] - dx;        this.initPageY = p[1] - dy;        this.lastPageX = p[0];        this.lastPageY = p[1];        this.setStartPosition(p);    },    /**     * Sets the start position of the element.  This is set when the obj     * is initialized, the reset when a drag is started.     * @method setStartPosition     * @param pos current position (from previous lookup)     * @private     */    setStartPosition: function(pos) {        var p = pos || Dom.getXY( this.getEl() );        this.deltaSetXY = null;        this.startPageX = p[0];        this.startPageY = p[1];    },    /**     * Add this instance to a group of related drag/drop objects.  All      * instances belong to at least one group, and can belong to as many      * groups as needed.     * @method addToGroup     * @param sGroup {string} the name of the group     */    addToGroup: function(sGroup) {        this.groups[sGroup] = true;        this.DDM.regDragDrop(this, sGroup);    },    /**     * Remove's this instance from the supplied interaction group     * @method removeFromGroup     * @param {string}  sGroup  The group to drop     */    removeFromGroup: function(sGroup) {        if (this.groups[sGroup]) {            delete this.groups[sGroup];        }        this.DDM.removeDDFromGroup(this, sGroup);    },    /**     * Allows you to specify that an element other than the linked element      * will be moved with the cursor during a drag     * @method setDragElId     * @param id {string} the id of the element that will be used to initiate the drag     */    setDragElId: function(id) {        this.dragElId = id;    },    /**     * Allows you to specify a child of the linked element that should be      * used to initiate the drag operation.  An example of this would be if      * you have a content div with text and links.  Clicking anywhere in the      * content area would normally start the drag operation.  Use this method     * to specify that an element inside of the content div is the element      * that starts the drag operation.     * @method setHandleElId     * @param id {string} the id of the element that will be used to      * initiate the drag.     */    setHandleElId: function(id) {        if (typeof id !== "string") {            YAHOO.log("id is not a string, assuming it is an HTMLElement");            id = Dom.generateId(id);        }        this.handleElId = id;        this.DDM.regHandle(this.id, id);    },    /**     * Allows you to set an element outside of the linked element as a drag      * handle     * @method setOuterHandleElId     * @param id the id of the element that will be used to initiate the drag     */    setOuterHandleElId: function(id) {        if (typeof id !== "string") {            YAHOO.log("id is not a string, assuming it is an HTMLElement");            id = Dom.generateId(id);        }        Event.on(id, "mousedown",                 this.handleMouseDown, this, true);        this.setHandleElId(id);        this.hasOuterHandles = true;    },    /**     * Remove all drag and drop hooks for this element     * @method unreg     */    unreg: function() {        Event.removeListener(this.id, "mousedown",                 this.handleMouseDown);        this._domRef = null;        this.DDM._remove(this);    },    /**     * Returns true if this instance is locked, or the drag drop mgr is locked     * (meaning that all drag/drop is disabled on the page.)     * @method isLocked     * @return {boolean} true if this obj or all drag/drop is locked, else      * false     */    isLocked: function() {        return (this.DDM.isLocked() || this.locked);    },    /**     * Fired when this object is clicked     * @method handleMouseDown     * @param {Event} e      * @param {YAHOO.util.DragDrop} oDD the clicked dd object (this dd obj)     * @private     */    handleMouseDown: function(e, oDD) {        var button = e.which || e.button;        if (this.primaryButtonOnly && button > 1) {            return;        }        if (this.isLocked()) {            return;        }        this.DDM.refreshCache(this.groups);        // var self = this;        // setTimeout( function() { self.DDM.refreshCache(self.groups); }, 0);        // Only process the event if we really clicked within the linked         // element.  The reason we make this check is that in the case that         // another element was moved between the clicked element and the         // cursor in the time between the mousedown and mouseup events. When         // this happens, the element gets the next mousedown event         // regardless of where on the screen it happened.          var pt = new YAHOO.util.Point(Event.getPageX(e), Event.getPageY(e));        if (!this.hasOuterHandles && !this.DDM.isOverTarget(pt, this) )  {        } else {            if (this.clickValidator(e)) {                // set the initial element position                this.setStartPosition();                this.b4MouseDown(e);                this.onMouseDown(e);                this.DDM.handleMouseDown(e, this);                this.DDM.stopEvent(e);            } else {            }        }    },    clickValidator: function(e) {        var target = Event.getTarget(e);        return ( this.isValidHandleChild(target) &&                    (this.id == this.handleElId ||                         this.DDM.handleWasClicked(target, this.id)) );    },    /**     * Allows you to specify a tag name that should not start a drag operation     * when clicked.  This is designed to facilitate embedding links within a     * drag handle that do something other than start the drag.     * @method addInvalidHandleType     * @param {string} tagName the type of element to exclude     */    addInvalidHandleType: function(tagName) {        var type = tagName.toUpperCase();        this.invalidHandleTypes[type] = type;    },    /**     * Lets you to specify an element id for a child of a drag handle     * that should not initiate a drag     * @method addInvalidHandleId     * @param {string} id the element id of the element you wish to ignore     */    addInvalidHandleId: function(id) {        if (typeof id !== "string") {            YAHOO.log("id is not a string, assuming it is an HTMLElement");            id = Dom.generateId(id);        }        this.invalidHandleIds[id] = id;    },    /**     * Lets you specify a css class of elements that will not initiate a drag

⌨️ 快捷键说明

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