使用jquery.resize.js的时候经常报错,解决思路和方式

一、遇到的问题

一开始项目中用到了jquery.resize.js这个文件,使用这个文件来监听div等内容的高度和宽度的变化,但是在使用的时候报错了,百度了一下,没有找到问题的原因,问题如下:

Uncaught TypeError: Cannot set property 'w' of undefined

具体报错如下:
在这里插入图片描述
在这里插入图片描述
二、解决思路:
1、一开始觉得是不是这个文件有问题,从网上下一个新的,然后我下了一下,换上了新的,又出了新的错误,不会捣鼓,整了半天,没啥用
2、然后我从网上找有没有js实现监听div宽度和高度变化的js代码,找了半天,在网上真的找到了一个,试了一下,可以(具体的链接:https://www.cnblogs.com/mmzuo-798/p/9548405.html
3、具体的js如下:

var EleResize = {
    
    
	_handleResize : function(e) {
    
    
		var ele = e.target || e.srcElement;
		var trigger = ele.__resizeTrigger__;
		if (trigger) {
    
    
			var handlers = trigger.__z_resizeListeners;
			if (handlers) {
    
    
				var size = handlers.length;
				for (var i = 0; i < size; i++) {
    
    
					var h = handlers[i];
					var handler = h.handler;
					var context = h.context;
					handler.apply(context, [ e ]);
				}
			}
		}
	},
	_removeHandler : function(ele, handler, context) {
    
    
		var handlers = ele.__z_resizeListeners;
		if (handlers) {
    
    
			var size = handlers.length;
			for (var i = 0; i < size; i++) {
    
    
				var h = handlers[i];
				if (h.handler === handler && h.context === context) {
    
    
					handlers.splice(i, 1);
					return;
				}
			}
		}
	},
	_createResizeTrigger : function(ele) {
    
    
		var 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) {
    
    
		var 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) {
    
    
		var 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) {
    
    
		var handlers = ele.__z_resizeListeners;
		if (!handlers) {
    
    
			handlers = [];
			ele.__z_resizeListeners = handlers;

			if (getComputedStyle(ele, null).position === 'static') {
    
    
				ele.style.position = 'relative';
			}
			var obj = EleResize._createResizeTrigger(ele);
			ele.__resizeTrigger__ = obj;
			obj.__resizeElement__ = ele;
		}
		handlers.push({
    
    
			handler : handler,
			context : context
		});
	};
	EleResize.off = function(ele, handler, context) {
    
    
		var handlers = ele.__z_resizeListeners;
		if (handlers) {
    
    
			EleResize._removeHandler(ele, handler, context);
			if (handlers.length === 0) {
    
    
				var trigger = ele.__resizeTrigger__;
				if (trigger) {
    
    
					trigger.contentDocument.defaultView.removeEventListener(
							'resize', EleResize._handleResize);
					ele.removeChild(trigger);
					delete ele.__resizeTrigger__;
				}
				delete ele.__z_resizeListeners;
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_28013889/article/details/107990999