106 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			106 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| 
								 | 
							
								let EleResize = {
							 | 
						||
| 
								 | 
							
								    _handleResize: function (e) {
							 | 
						||
| 
								 | 
							
								        let ele = e.target || e.srcElement
							 | 
						||
| 
								 | 
							
								        let trigger = ele.__resizeTrigger__
							 | 
						||
| 
								 | 
							
								        if (trigger) {
							 | 
						||
| 
								 | 
							
								            let handlers = trigger.__z_resizeListeners
							 | 
						||
| 
								 | 
							
								            if (handlers) {
							 | 
						||
| 
								 | 
							
								                let size = handlers.length
							 | 
						||
| 
								 | 
							
								                for (let i = 0; i < size; i++) {
							 | 
						||
| 
								 | 
							
								                    let h = handlers[i]
							 | 
						||
| 
								 | 
							
								                    let handler = h.handler
							 | 
						||
| 
								 | 
							
								                    let context = h.context
							 | 
						||
| 
								 | 
							
								                    handler.apply(context, [e])
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    _removeHandler: function (ele, handler, context) {
							 | 
						||
| 
								 | 
							
								        let handlers = ele.__z_resizeListeners
							 | 
						||
| 
								 | 
							
								        if (handlers) {
							 | 
						||
| 
								 | 
							
								            let size = handlers.length
							 | 
						||
| 
								 | 
							
								            for (let i = 0; i < size; i++) {
							 | 
						||
| 
								 | 
							
								                let h = handlers[i]
							 | 
						||
| 
								 | 
							
								                if (h.handler === handler && h.context === context) {
							 | 
						||
| 
								 | 
							
								                    handlers.splice(i, 1)
							 | 
						||
| 
								 | 
							
								                    return
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    _createResizeTrigger: function (ele) {
							 | 
						||
| 
								 | 
							
								        let obj = document.createElement('object')
							 | 
						||
| 
								 | 
							
								        obj.setAttribute('style',
							 | 
						||
| 
								 | 
							
								            'display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden;opacity: 0; pointer-events: none; z-index: -1;')
							 | 
						||
| 
								 | 
							
								        obj.onload = EleResize._handleObjectLoad
							 | 
						||
| 
								 | 
							
								        obj.type = 'text/html'
							 | 
						||
| 
								 | 
							
								        ele.appendChild(obj)
							 | 
						||
| 
								 | 
							
								        obj.data = 'about:blank'
							 | 
						||
| 
								 | 
							
								        return obj
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    _handleObjectLoad: function (evt) {
							 | 
						||
| 
								 | 
							
								        this.contentDocument.defaultView.__resizeTrigger__ = this.__resizeElement__
							 | 
						||
| 
								 | 
							
								        this.contentDocument.defaultView.addEventListener('resize', EleResize._handleResize)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								if (document.attachEvent) { // ie9-10
							 | 
						||
| 
								 | 
							
								    EleResize.on = function (ele, handler, context) {
							 | 
						||
| 
								 | 
							
								        let handlers = ele.__z_resizeListeners
							 | 
						||
| 
								 | 
							
								        if (!handlers) {
							 | 
						||
| 
								 | 
							
								            handlers = []
							 | 
						||
| 
								 | 
							
								            ele.__z_resizeListeners = handlers
							 | 
						||
| 
								 | 
							
								            ele.__resizeTrigger__ = ele
							 | 
						||
| 
								 | 
							
								            ele.attachEvent('onresize', EleResize._handleResize)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        handlers.push({
							 | 
						||
| 
								 | 
							
								            handler: handler,
							 | 
						||
| 
								 | 
							
								            context: context
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    EleResize.off = function (ele, handler, context) {
							 | 
						||
| 
								 | 
							
								        let handlers = ele.__z_resizeListeners
							 | 
						||
| 
								 | 
							
								        if (handlers) {
							 | 
						||
| 
								 | 
							
								            EleResize._removeHandler(ele, handler, context)
							 | 
						||
| 
								 | 
							
								            if (handlers.length === 0) {
							 | 
						||
| 
								 | 
							
								                ele.detachEvent('onresize', EleResize._handleResize)
							 | 
						||
| 
								 | 
							
								                delete ele.__z_resizeListeners
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								} else {
							 | 
						||
| 
								 | 
							
								    EleResize.on = function (ele, handler, context) {
							 | 
						||
| 
								 | 
							
								        let handlers = ele.__z_resizeListeners
							 | 
						||
| 
								 | 
							
								        if (!handlers) {
							 | 
						||
| 
								 | 
							
								            handlers = []
							 | 
						||
| 
								 | 
							
								            ele.__z_resizeListeners = handlers
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (getComputedStyle(ele, null).position === 'static') {
							 | 
						||
| 
								 | 
							
								                ele.style.position = 'relative'
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            let obj = EleResize._createResizeTrigger(ele)
							 | 
						||
| 
								 | 
							
								            ele.__resizeTrigger__ = obj
							 | 
						||
| 
								 | 
							
								            obj.__resizeElement__ = ele
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        handlers.push({
							 | 
						||
| 
								 | 
							
								            handler: handler,
							 | 
						||
| 
								 | 
							
								            context: context
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    EleResize.off = function (ele, handler, context) {
							 | 
						||
| 
								 | 
							
								        let handlers = ele.__z_resizeListeners
							 | 
						||
| 
								 | 
							
								        if (handlers) {
							 | 
						||
| 
								 | 
							
								            EleResize._removeHandler(ele, handler, context)
							 | 
						||
| 
								 | 
							
								            if (handlers.length === 0) {
							 | 
						||
| 
								 | 
							
								                let trigger = ele.__resizeTrigger__
							 | 
						||
| 
								 | 
							
								                if (trigger) {
							 | 
						||
| 
								 | 
							
								                    trigger.contentDocument.defaultView.removeEventListener('resize', EleResize._handleResize)
							 | 
						||
| 
								 | 
							
								                    ele.removeChild(trigger)
							 | 
						||
| 
								 | 
							
								                    delete ele.__resizeTrigger__
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                delete ele.__z_resizeListeners
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export {EleResize}
							 |