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

📄 dragdrop.js

📁 YahooUI,搞WEB开发的朋友值得看一看
💻 JS
📖 第 1 页 / 共 5 页
字号:
/*Copyright (c) 2006 Yahoo! Inc. All rights reserved.version 0.9.0*//** * @class Defines the interface and base operation of items that that can be * dragged or can be drop targets.  It was designed to be extended, overriding * the event handlers for startDrag, onDrag, onDragOver, onDragOut. * Up to three html elements can be associated with a DragDrop instance: * <ul> * <li>linked element: the element that is passed into the constructor. * This is the element which defines the boundaries for interaction with * other DragDrop objects.</li> * <li>handle element(s): The drag operation only occurs if the element that * was clicked matches a handle element.  By default this is the linked * element, but there are times that you will want only a portion of the * linked element to initiate the drag operation, and the setHandleElId() * method provides a way to define this.</li> * <li>drag element: this represents an the element that would be moved along * with the cursor during a drag operation.  By default, this is the linked * element itself as in {@link YAHOO.util.DD}.  setDragElId() lets you define * a separate element that would be moved, as in {@link YAHOO.util.DDProxy} * </li> * </ul> * This class should not be instantiated until the onload event to ensure that * the associated elements are available. * The following would define a DragDrop obj that would interact with any * other * DragDrop obj in the "group1" group: * <pre> *  dd = new YAHOO.util.DragDrop("div1", "group1"); * </pre> * Since none of the event handlers have been implemented, nothing would * actually happen if you were to run the code above.  Normally you would * override this class or one of the default implementations, but you can * also override the methods you want on an instance of the class... * <pre> *  dd.onDragDrop = function(e, id) { *   alert("dd was dropped on " + id); *  } * </pre> * @constructor * @param {String} id of the element that is linked to this instance * @param {String} sGroup the group of related DragDrop objects */YAHOO.util.DragDrop = function(id, sGroup) {    if (id) {        this.init(id, sGroup);    }};YAHOO.util.DragDrop.prototype = {    /**     * The id of the element associated with this object.  This is what we     * refer to as the "linked element" because the size and position of     * this element is used to determine when the drag and drop objects have     * interacted.     *     * @type String     */    id: null,    /**     * The id of the element that will be dragged.  By default this is same     * as the linked element , but could be changed to another element. Ex:     * YAHOO.util.DDProxy     *     * @type String     * @private     */    dragElId: null,    /**     * the id of the element that initiates the drag operation.  By default     * this is the linked element, but could be changed to be a child of this     * element.  This lets us do things like only starting the drag when the     * header element within the linked html element is clicked.     *     * @type String     * @private     */    handleElId: null,    /**     * An array of HTML tags that will be ignored if clicked.     */    invalidHandleTypes: null,    /**     * The linked element's absolute X position at the time the drag was     * started     *     * @type int     * @private     */    startPageX: 0,    /**     * The linked element's absolute X position at the time the drag was     * started     *     * @type int     * @private     */    startPageY: 0,    /**     * The group defines a logical collection of DragDrop objects that are     * related.  Instances only get events when interacting with other     * DragDrop object in the same group.  This lets us define multiple     * groups using a single DragDrop subclass if we want.     *     */    groups: null,    /**     * Individual drag/drop instances can be locked.  This will prevent     * onmousedown start drag.     *     * @type boolean     * @private     */    locked: false,    /**     * Lock this instance     */    lock: function() { this.locked = true; },    /**     * Unlock this instace     */    unlock: function() { this.locked = false; },    /**     * By default, all insances can be a drop target.  This can be disabled by     * setting isTarget to false.     *     * @type boolean     */    isTarget: true,    /**     * The padding configured for this drag and drop object for calculating     * the drop zone intersection with this object.     */    padding: null,    /**     * @private     */    _domRef: null,    /**     * Internal typeof flag     * @private     */    __ygDragDrop: true,    /**     * Set to true when horizontal contraints are applied     *     * @type boolean     * @private     */    constrainX: false,    /**     * Set to true when vertical contraints are applied     *     * @type boolean     * @private     */    constrainY: false,    /**     * The left constraint     *     * @type int     * @private     */    minX: 0,    /**     * The right constraint     *     * @type int     * @private     */    maxX: 0,    /**     * The up constraint     *     * @type int     * @private     */    minY: 0,    /**     * The down constraint     *     * @type int     * @private     */    maxY: 0,    /**     * Maintain offsets when we resetconstraints.  Used to maintain the     * slider thumb value, and this needs to be fixed.     * @type boolean     */    maintainOffset: false,    /**     * Array of pixel locations the element will snap to if we specified a     * horizontal graduation/interval.  This array is generated automatically     * when you define a tick interval.     * @type int[]     */    xTicks: null,    /**     * Array of pixel locations the element will snap to if we specified a     * vertical graduation/interval.  This array is generated automatically     * when you define a tick interval.     * @type int[]     */    yTicks: null,    /**     * By default the drag and drop instance will only respond to the primary     * button click (left button for a right-handed mouse).  Set to true to     * allow drag and drop to start with any mouse click that is propogated     * by the browser     * @type boolean     */    primaryButtonOnly: true,    /**     * Code that executes immediately before the startDrag event     * @private     */    b4StartDrag: function(x, y) { },    /**     * Abstract method called after a drag/drop object is clicked     * and the drag or mousedown time thresholds have beeen met.     *     * @param {int} X click location     * @param {int} Y click location     */    startDrag: function(x, y) { /* override this */ },    /**     * Code that executes immediately before the onDrag event     * @private     */    b4Drag: function(e) { },    /**     * Abstract method called during the onMouseMove event while dragging an     * object.     *     * @param {Event} e     */    onDrag: function(e) { /* override this */ },    /**     * Code that executes immediately before the onDragEnter event     * @private     */    // b4DragEnter: function(e) { },    /**     * Abstract method called when this element fist begins hovering over     * another DragDrop obj     *     * @param {Event} e     * @param {String || YAHOO.util.DragDrop[]} id In POINT mode, the element     * id this is hovering over.  In INTERSECT mode, an array of one or more     * dragdrop items being hovered over.     */    onDragEnter: function(e, id) { /* override this */ },    /**     * Code that executes immediately before the onDragOver event     * @private     */    b4DragOver: function(e) { },    /**     * Abstract method called when this element is hovering over another     * DragDrop obj     *     * @param {Event} e     * @param {String || YAHOO.util.DragDrop[]} id In POINT mode, the element     * id this is hovering over.  In INTERSECT mode, an array of dd items     * being hovered over.     */    onDragOver: function(e, id) { /* override this */ },    /**     * Code that executes immediately before the onDragOut event     * @private     */    b4DragOut: function(e) { },    /**     * Abstract method called when we are no longer hovering over an element     *     * @param {Event} e     * @param {String || YAHOO.util.DragDrop[]} id In POINT mode, the element     * id this was hovering over.  In INTERSECT mode, an array of dd items     * that the mouse is no longer over.     */    onDragOut: function(e, id) { /* override this */ },    /**     * Code that executes immediately before the onDragDrop event     * @private     */    b4DragDrop: function(e) { },    /**     * Abstract method called when this item is dropped on another DragDrop     * obj     *     * @param {Event} e     * @param {String || YAHOO.util.DragDrop[]} id In POINT mode, the element     * id this was dropped on.  In INTERSECT mode, an array of dd items this     * was dropped on.     */    onDragDrop: function(e, id) { /* override this */ },    /**     * Code that executes immediately before the endDrag event     * @private     */    b4EndDrag: function(e) { },    /**     * Fired when we are done dragging the object     *     * @param {Event} e     */    endDrag: function(e) { /* override this */ },    /**     * Code executed immediately before the onMouseDown event     * @param {Event} e     * @private     */    b4MouseDown: function(e) {  },    /**     * Event handler that fires when a drag/drop obj gets a mousedown     * @param {Event} e     */    onMouseDown: function(e) { /* override this */ },    /**     * Event handler that fires when a drag/drop obj gets a mouseup     * @param {Event} e     */    onMouseUp: function(e) { /* override this */ },    /**     * Returns a reference to the linked element     *     * @return {Object} the html element     */    getEl: function() {        if (!this._domRef) {            this._domRef = this.DDM.getElement(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     *     * @return {Object} the html element     */    getDragEl: function() {        return this.DDM.getElement(this.dragElId);    },    /**     * Sets up the DragDrop object.  Must be called in the constructor of any     * YAHOO.util.DragDrop subclass     *     * @param id the id of the linked element     * @param {String} sGroup the group of related items     * element is supposed to be a target only, set to false.     */    init: function(id, sGroup) {        this.initTarget(id, sGroup);        YAHOO.util.Event.addListener(id, "mousedown",                                          this.handleMouseDown, this, true);    },    /**     * Initializes Targeting functionality only... the object does not     * get a mousedown handler.     *     * @param id the id of the linked element     * @param {String} sGroup the group of related items     * element is supposed to be a target only, set to false.     */    initTarget: function(id, sGroup) {        // create a local reference to the drag and drop manager        this.DDM = YAHOO.util.DDM;        // set the default padding        this.padding = [0, 0, 0, 0];        // initialize the groups array        this.groups = {};        // set the id        this.id = id;

⌨️ 快捷键说明

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