使用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;
			}
		}
	}
}
06-18
概要<br>对于具有窗口, 只能是某些规模有时非常有用。 例如, MicrosoftWord 和 Microsoft Visual C++® 有工具栏是大小可调整到最适合控件工具栏中特定大小。 这样做, 最好授予用户可视提示有关可用窗口大小。 通过示例 RESIZE 示例代码显示如何修改 Windows 窗口以便当用户使用鼠标来调整窗口边框跳转到下一个可用大小自动调整方式。 <br>更多信息<br>可用于从 Microsoft 下载中心下载下列文件:<br><br>Resize.exe (http://download.microsoft.com/download/platformsdk/sample52/1/w9xnt4/en-us/resize.exe)<br>有关如何下载 Microsoft 支持文件请单击下列文章编号以查看 Microsoft 知识库中相应: <br>119591 (http://support.microsoft.com/kb/119591/EN-US/) 如何从联机服务获取 Microsoft 支持文件 <br>此文件进行病毒扫描 Microsoft。 Microsoft 使用最新病毒检测软件, 投递文件日期上的可用。 文件存储, 有助于防止对文件进行任何未经授权更改安全性增强的服务器上。 当用户单击的窗口, 调整边框 Windows 进入 PeekMessage 循环以捕获所有鼠标消息发生直到已释放鼠标左键。 而在此循环, 每当鼠标移动移动矩形, 显示新窗口大小以向用户与新窗口大小将是什么提供可视提示。 <br><br>通过进入消息循环以捕获鼠标消息直到是左按钮释放其自己 RESIZE 示例代码修改调整操作。 不用每次接收鼠标移动, 更新矩形 RESIZE 代码检查以查看如果当前鼠标位置会使窗口大小之一可能窗口宽度和高度大小由应用程序所定义。 由此, RESIZE 应用程序提供更准确的可视提示有关调整操作将采取哪些。 <br><br>通过同时用于 Windows 和 RESIZE 应用 WM_NCLBUTTONDOWN 邮件触发调整操作。 当收到此消息, 消息循环输入来过滤掉除对两, WM _ MOUSEMOVE 和 WM _ LBUTTONUP 所有鼠标消息。 RESIZE 应用程序接收到 WM _ MOUSEMOVE 消息, 时检查以查看放大或缩小如果当前鼠标位置将使窗口。 如果窗口是小, 调整矩形移到下一个小维度由应用程序定义。 如果窗口是大, 程序将检查以是否会对下可能维度足够新大小以及相应更新矩形。 接收到 WM _ LBUTTONUP 消息, 时通过窗口大小更新到当前位置由鼠标完成调整操作并删除矩形。 <br><br>RESIZE 应用程序还利用了一部分由处理 WM_NCHITTEST 消息提供了灵活性。 Windows 向应用程序与鼠标位置发送此消息并期望应用程序能够描述的窗口, 包括鼠标位置部分。 经常, 应用程序传递到 DefWindowProc() 此消息并让默认计算是什么鼠标是顶部告诉系统负责。 RESIZE 应用允许 DefWindowProc() 来处理消息, 但然后检查以确定是否将鼠标置于某个在工作区或调整转角。 为了简化调整操作, RESIZE 不让调整从窗口角, 以便 HTTOPRIGHT 点击测试代码并返回 HTBOTTOM 或 HTTOP 替代 HTBOTTOMLEFT HTTOPLEFT, HTBOTTOMRIGHT, 应用程序和用户。 由此, 鼠标光标准确反映调整的方向。 当 HTCLIENT 命中返回测试代码, RESIZE 变为这 HTCAPTION 以便窗口以移动即使它没有标题栏。 <br><br>尽管此方法将使用 Windows 95, 就没有必要。 Windows 95 提供新消息 WM_SIZING, 将启用程序不处理 WM_NCxxx 消息或进入 PeekMessage() 循环进行完全相同。 <br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值