📄 resize.js
字号:
this._status = document.createElement('span'); this._status.className = this.CSS_STATUS; document.body.insertBefore(this._status, document.body.firstChild); }, /** * @private * @method _ieSelectFix * @description The function we use as the onselectstart handler when we start a drag in Internet Explorer */ _ieSelectFix: function() { return false; }, /** * @private * @property _ieSelectBack * @description We will hold a copy of the current "onselectstart" method on this property, and reset it after we are done using it. */ _ieSelectBack: null, /** * @private * @method _setAutoRatio * @param {Event} ev A mouse event. * @description This method checks to see if the "autoRatio" config is set. If it is, we will check to see if the "Shift Key" is pressed. If so, we will set the config ratio to true. */ _setAutoRatio: function(ev) { if (this.get('autoRatio')) { if (ev && ev.shiftKey) { //Shift Pressed this.set('ratio', true); } else { this.set('ratio', this._configs.ratio._initialConfig.value); } } }, /** * @private * @method _handleMouseDown * @param {Event} ev A mouse event. * @description This method preps the autoRatio on MouseDown. */ _handleMouseDown: function(ev) { if (this._locked) { return false; } if (D.getStyle(this._wrap, 'position') == 'absolute') { this._positioned = true; } if (ev) { this._setAutoRatio(ev); } if (this.browser.ie) { this._ieSelectBack = document.body.onselectstart; document.body.onselectstart = this._ieSelectFix; } }, /** * @private * @method _handleMouseOver * @param {Event} ev A mouse event. * @description Adds CSS class names to the handles */ _handleMouseOver: function(ev) { if (this._locked) { return false; } //Internet Explorer needs this D.removeClass(this._wrap, this.CSS_RESIZE); if (this.get('hover')) { D.removeClass(this._wrap, this.CSS_HOVER); } var tar = Event.getTarget(ev); if (!D.hasClass(tar, this.CSS_HANDLE)) { tar = tar.parentNode; } if (D.hasClass(tar, this.CSS_HANDLE) && !this._active) { D.addClass(tar, this.CSS_HANDLE + '-active'); for (var i in this._handles) { if (Lang.hasOwnProperty(this._handles, i)) { if (this._handles[i] == tar) { D.addClass(tar, this.CSS_HANDLE + '-' + i + '-active'); break; } } } } //Internet Explorer needs this D.addClass(this._wrap, this.CSS_RESIZE); }, /** * @private * @method _handleMouseOut * @param {Event} ev A mouse event. * @description Removes CSS class names to the handles */ _handleMouseOut: function(ev) { //Internet Explorer needs this D.removeClass(this._wrap, this.CSS_RESIZE); if (this.get('hover') && !this._active) { D.addClass(this._wrap, this.CSS_HOVER); } var tar = Event.getTarget(ev); if (!D.hasClass(tar, this.CSS_HANDLE)) { tar = tar.parentNode; } if (D.hasClass(tar, this.CSS_HANDLE) && !this._active) { D.removeClass(tar, this.CSS_HANDLE + '-active'); for (var i in this._handles) { if (Lang.hasOwnProperty(this._handles, i)) { if (this._handles[i] == tar) { D.removeClass(tar, this.CSS_HANDLE + '-' + i + '-active'); break; } } } } //Internet Explorer needs this D.addClass(this._wrap, this.CSS_RESIZE); }, /** * @private * @method _handleStartDrag * @param {Object} args The args passed from the CustomEvent. * @param {Object} dd The <a href="YAHOO.util.DragDrop.html">YAHOO.util.DragDrop</a> object we are working with. * @description Resizes the proxy, sets up the <a href="YAHOO.util.DragDrop.html">YAHOO.util.DragDrop</a> handlers, updates the status div and preps the cache */ _handleStartDrag: function(args, dd) { var tar = dd.getDragEl(); if (D.hasClass(tar, this.CSS_HANDLE)) { if (D.getStyle(this._wrap, 'position') == 'absolute') { this._positioned = true; } this._active = true; this._currentDD = dd; if (this._proxy) { this._proxy.style.visibility = 'visible'; this._proxy.style.zIndex = '1000'; this._proxy.style.height = this.get('element').clientHeight + 'px'; this._proxy.style.width = this.get('element').clientWidth + 'px'; } for (var i in this._handles) { if (Lang.hasOwnProperty(this._handles, i)) { if (this._handles[i] == tar) { this._currentHandle = i; var handle = '_handle_for_' + i; D.addClass(tar, this.CSS_HANDLE + '-' + i + '-active'); dd.on('dragEvent', this[handle], this, true); dd.on('mouseUpEvent', this._handleMouseUp, this, true); break; } } } D.addClass(tar, this.CSS_HANDLE + '-active'); if (this.get('proxy')) { var xy = D.getXY(this.get('element')); D.setXY(this._proxy, xy); if (this.get('ghost')) { this.addClass(this.CSS_GHOST); } } D.addClass(this._wrap, this.CSS_RESIZING); this._setCache(); this._updateStatus(this._cache.height, this._cache.width, this._cache.top, this._cache.left); this.fireEvent('startResize', { type: 'startresize', target: this}); } }, /** * @private * @method _setCache * @description Sets up the this._cache hash table. */ _setCache: function() { this._cache.xy = D.getXY(this._wrap); D.setXY(this._wrap, this._cache.xy); this._cache.height = this.get('clientHeight'); this._cache.width = this.get('clientWidth'); this._cache.start.height = this._cache.height; this._cache.start.width = this._cache.width; this._cache.start.top = this._cache.xy[1]; this._cache.start.left = this._cache.xy[0]; this._cache.top = this._cache.xy[1]; this._cache.left = this._cache.xy[0]; this.set('height', this._cache.height, true); this.set('width', this._cache.width, true); }, /** * @private * @method _handleMouseUp * @param {Event} ev A mouse event. * @description Cleans up listeners, hides proxy element and removes class names. */ _handleMouseUp: function(ev) { this._active = false; var handle = '_handle_for_' + this._currentHandle; this._currentDD.unsubscribe('dragEvent', this[handle], this, true); this._currentDD.unsubscribe('mouseUpEvent', this._handleMouseUp, this, true); if (this._proxy) { this._proxy.style.visibility = 'hidden'; this._proxy.style.zIndex = '-1'; if (this.get('setSize')) { this.resize(ev, this._cache.height, this._cache.width, this._cache.top, this._cache.left, true); } else { this.fireEvent('resize', { ev: 'resize', target: this, height: this._cache.height, width: this._cache.width, top: this._cache.top, left: this._cache.left }); } if (this.get('ghost')) { this.removeClass(this.CSS_GHOST); } } if (this.get('hover')) { D.addClass(this._wrap, this.CSS_HOVER); } if (this._status) { D.setStyle(this._status, 'display', 'none'); } if (this.browser.ie) { document.body.onselectstart = this._ieSelectBack; } if (this.browser.ie) { D.removeClass(this._wrap, this.CSS_RESIZE); } for (var i in this._handles) { if (Lang.hasOwnProperty(this._handles, i)) { D.removeClass(this._handles[i], this.CSS_HANDLE + '-active'); } } if (this.get('hover') && !this._active) { D.addClass(this._wrap, this.CSS_HOVER); } D.removeClass(this._wrap, this.CSS_RESIZING); D.removeClass(this._handles[this._currentHandle], this.CSS_HANDLE + '-' + this._currentHandle + '-active'); D.removeClass(this._handles[this._currentHandle], this.CSS_HANDLE + '-active'); if (this.browser.ie) { D.addClass(this._wrap, this.CSS_RESIZE); } this._resizeEvent = null; this._currentHandle = null; if (!this.get('animate')) { this.set('height', this._cache.height, true); this.set('width', this._cache.width, true); } this.fireEvent('endResize', { ev: 'endResize', target: this, height: this._cache.height, width: this._cache.width, top: this._cache.top, left: this._cache.left }); }, /** * @private * @method _setRatio * @param {Number} h The height offset. * @param {Number} w The with offset. * @param {Number} t The top offset. * @param {Number} l The left offset. * @description Using the Height, Width, Top & Left, it recalcuates them based on the original element size. * @return {Array} The new Height, Width, Top & Left settings */ _setRatio: function(h, w, t, l) { var oh = h, ow = w; if (this.get('ratio')) { var orgH = this._cache.height, orgW = this._cache.width, nh = parseInt(this.get('height'), 10), nw = parseInt(this.get('width'), 10), maxH = this.get('maxHeight'), minH = this.get('minHeight'), maxW = this.get('maxWidth'), minW = this.get('minWidth'); switch (this._currentHandle) { case 'l': h = nh * (w / nw); h = Math.min(Math.max(minH, h), maxH); w = nw * (h / nh); t = (this._cache.start.top - (-((nh - h) / 2))); l = (this._cache.start.left - (-((nw - w)))); break; case 'r': h = nh * (w / nw); h = Math.min(Math.max(minH, h), maxH); w = nw * (h / nh); t = (this._cache.start.top - (-((nh - h) / 2))); break; case 't': w = nw * (h / nh); h = nh * (w / nw); l = (this._cache.start.left - (-((nw - w) / 2))); t = (this._cache.start.top - (-((nh - h)))); break; case 'b': w = nw * (h / nh); h = nh * (w / nw); l = (this._cache.start.left - (-((nw - w) / 2))); break; case 'bl': h = nh * (w / nw); w = nw * (h / nh); l = (this._cache.start.left - (-((nw - w)))); break; case 'br': h = nh * (w / nw); w = nw * (h / nh); break; case 'tl': h = nh * (w / nw); w = nw * (h / nh); l = (this._cache.start.left - (-((nw - w)))); t = (this._cache.start.top - (-((nh - h)))); break; case 'tr': h = nh * (w / nw); w = nw * (h / nh); l = (this._cache.start.left); t = (this._cache.start.top - (-((nh - h)))); break; } oh = this._checkHeight(h); ow = this._checkWidth(w); if ((oh != h) || (ow != w)) { t = 0; l = 0; if (oh != h) { ow = this._cache.width; } if (ow != w) { oh = this._cache.height; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -