📄 resize-debug.js
字号:
/*Copyright (c) 2008, Yahoo! Inc. All rights reserved.Code licensed under the BSD License:http://developer.yahoo.net/yui/license.txtversion: 2.6.0*//** * @description <p>Makes an element resizable</p> * @namespace YAHOO.util * @requires yahoo, dom, dragdrop, element, event * @optional animation * @module resize * @beta */(function() {var D = YAHOO.util.Dom, Event = YAHOO.util.Event, Lang = YAHOO.lang; /** * @constructor * @class Resize * @extends YAHOO.util.Element * @description <p>Makes an element resizable</p> * @param {String/HTMLElement} el The element to make resizable. * @param {Object} attrs Object liternal containing configuration parameters. */ var Resize = function(el, config) { YAHOO.log('Creating Resize Object', 'info', 'Resize'); var oConfig = { element: el, attributes: config || {} }; Resize.superclass.constructor.call(this, oConfig.element, oConfig.attributes); }; /** * @private * @static * @property _instances * @description Internal hash table for all resize instances * @type Object */ Resize._instances = {}; /** * @static * @method getResizeById * @description Get's a resize object by the HTML id of the element associated with the Resize object. * @return {Object} The Resize Object */ Resize.getResizeById = function(id) { if (Resize._instances[id]) { return Resize._instances[id]; } YAHOO.log('No Instance Found', 'error', 'Resize'); return false; }; YAHOO.extend(Resize, YAHOO.util.Element, { /** * @private * @property CSS_RESIZE * @description Base CSS class name * @type String */ CSS_RESIZE: 'yui-resize', /** * @private * @property CSS_DRAG * @description Class name added when dragging is enabled * @type String */ CSS_DRAG: 'yui-draggable', /** * @private * @property CSS_HOVER * @description Class name used for hover only handles * @type String */ CSS_HOVER: 'yui-resize-hover', /** * @private * @property CSS_PROXY * @description Class name given to the proxy element * @type String */ CSS_PROXY: 'yui-resize-proxy', /** * @private * @property CSS_WRAP * @description Class name given to the wrap element * @type String */ CSS_WRAP: 'yui-resize-wrap', /** * @private * @property CSS_KNOB * @description Class name used to make the knob style handles * @type String */ CSS_KNOB: 'yui-resize-knob', /** * @private * @property CSS_HIDDEN * @description Class name given to the wrap element to make all handles hidden * @type String */ CSS_HIDDEN: 'yui-resize-hidden', /** * @private * @property CSS_HANDLE * @description Class name given to all handles, used as a base for single handle names as well.. Handle "t" will get this.CSS_HANDLE + '-t' as well as this.CSS_HANDLE * @type String */ CSS_HANDLE: 'yui-resize-handle', /** * @private * @property CSS_STATUS * @description Class name given to the status element * @type String */ CSS_STATUS: 'yui-resize-status', /** * @private * @property CSS_GHOST * @description Class name given to the wrap element when the ghost property is active * @type String */ CSS_GHOST: 'yui-resize-ghost', /** * @private * @property CSS_RESIZING * @description Class name given to the wrap element when a resize action is taking place. * @type String */ CSS_RESIZING: 'yui-resize-resizing', /** * @private * @property _resizeEvent * @description The mouse event used to resize with * @type Event */ _resizeEvent: null, /** * @private * @property dd * @description The <a href="YAHOO.util.DragDrop.html">YAHOO.util.DragDrop</a> instance used if draggable is true * @type Object */ dd: null, /** * @private * @property browser * @description A copy of the YAHOO.env.ua property * @type Object */ browser: YAHOO.env.ua, /** * @private * @property _locked * @description A flag to show if the resize is locked * @type Boolean */ _locked: null, /** * @private * @property _positioned * @description A flag to show if the element is absolutely positioned * @type Boolean */ _positioned: null, /** * @private * @property _dds * @description An Object containing references to all of the <a href="YAHOO.util.DragDrop.html">YAHOO.util.DragDrop</a> instances used for the resize handles * @type Object */ _dds: null, /** * @private * @property _wrap * @description The HTML reference of the element wrapper * @type HTMLElement */ _wrap: null, /** * @private * @property _proxy * @description The HTML reference of the element proxy * @type HTMLElement */ _proxy: null, /** * @private * @property _handles * @description An object containing references to all of the resize handles. * @type Object */ _handles: null, /** * @private * @property _currentHandle * @description The string identifier of the currently active handle. e.g. 'r', 'br', 'tl' * @type String */ _currentHandle: null, /** * @private * @property _currentDD * @description A link to the currently active DD object * @type Object */ _currentDD: null, /** * @private * @property _cache * @description An lookup table containing key information for the element being resized. e.g. height, width, x position, y position, etc.. * @type Object */ _cache: null, /** * @private * @property _active * @description Flag to show if the resize is active. Used for events. * @type Boolean */ _active: null, /** * @private * @method _createProxy * @description Creates the proxy element if the proxy config is true */ _createProxy: function() { if (this.get('proxy')) { YAHOO.log('Creating the Proxy Element', 'info', 'Resize'); this._proxy = document.createElement('div'); this._proxy.className = this.CSS_PROXY; this._proxy.style.height = this.get('element').clientHeight + 'px'; this._proxy.style.width = this.get('element').clientWidth + 'px'; this._wrap.parentNode.appendChild(this._proxy); } else { YAHOO.log('No proxy element, turn off animate config option', 'info', 'Resize'); this.set('animate', false); } }, /** * @private * @method _createWrap * @description Creates the wrap element if the wrap config is true. It will auto wrap the following element types: img, textarea, input, iframe, select */ _createWrap: function() { YAHOO.log('Create the wrap element', 'info', 'Resize'); this._positioned = false; //Force wrap for elements that can't have children switch (this.get('element').tagName.toLowerCase()) { case 'img': case 'textarea': case 'input': case 'iframe': case 'select': this.set('wrap', true); YAHOO.log('Auto-wrapping the element (' + this.get('element').tagName.toLowerCase() + ')', 'warn', 'Resize'); break; } if (this.get('wrap') === true) { YAHOO.log('Creating the wrap element', 'info', 'Resize'); this._wrap = document.createElement('div'); this._wrap.id = this.get('element').id + '_wrap'; this._wrap.className = this.CSS_WRAP; D.setStyle(this._wrap, 'width', this.get('width') + 'px'); D.setStyle(this._wrap, 'height', this.get('height') + 'px'); D.setStyle(this._wrap, 'z-index', this.getStyle('z-index')); this.setStyle('z-index', 0); var pos = D.getStyle(this.get('element'), 'position'); D.setStyle(this._wrap, 'position', ((pos == 'static') ? 'relative' : pos)); D.setStyle(this._wrap, 'top', D.getStyle(this.get('element'), 'top')); D.setStyle(this._wrap, 'left', D.getStyle(this.get('element'), 'left')); if (D.getStyle(this.get('element'), 'position') == 'absolute') { this._positioned = true; YAHOO.log('The element is positioned absolute', 'info', 'Resize'); D.setStyle(this.get('element'), 'position', 'relative'); D.setStyle(this.get('element'), 'top', '0'); D.setStyle(this.get('element'), 'left', '0'); } var par = this.get('element').parentNode; par.replaceChild(this._wrap, this.get('element')); this._wrap.appendChild(this.get('element')); } else { this._wrap = this.get('element'); if (D.getStyle(this._wrap, 'position') == 'absolute') { this._positioned = true; } } if (this.get('draggable')) { this._setupDragDrop(); } if (this.get('hover')) { D.addClass(this._wrap, this.CSS_HOVER); } if (this.get('knobHandles')) { D.addClass(this._wrap, this.CSS_KNOB); } if (this.get('hiddenHandles')) { D.addClass(this._wrap, this.CSS_HIDDEN); } D.addClass(this._wrap, this.CSS_RESIZE); }, /** * @private * @method _setupDragDrop * @description Setup the <a href="YAHOO.util.DragDrop.html">YAHOO.util.DragDrop</a> instance on the element */ _setupDragDrop: function() { YAHOO.log('Setting up the dragdrop instance on the element', 'info', 'Resize'); D.addClass(this._wrap, this.CSS_DRAG); this.dd = new YAHOO.util.DD(this._wrap, this.get('id') + '-resize', { dragOnly: true, useShim: this.get('useShim') }); this.dd.on('dragEvent', function() { this.fireEvent('dragEvent', arguments); }, this, true); }, /** * @private * @method _createHandles * @description Creates the handles as specified in the config */ _createHandles: function() { YAHOO.log('Creating the handles', 'info', 'Resize'); this._handles = {}; this._dds = {}; var h = this.get('handles'); for (var i = 0; i < h.length; i++) { YAHOO.log('Creating handle position: ' + h[i], 'info', 'Resize'); this._handles[h[i]] = document.createElement('div'); this._handles[h[i]].id = D.generateId(this._handles[h[i]]); this._handles[h[i]].className = this.CSS_HANDLE + ' ' + this.CSS_HANDLE + '-' + h[i]; var k = document.createElement('div'); k.className = this.CSS_HANDLE + '-inner-' + h[i]; this._handles[h[i]].appendChild(k); this._wrap.appendChild(this._handles[h[i]]); Event.on(this._handles[h[i]], 'mouseover', this._handleMouseOver, this, true);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -