From 3c64d33e6e5cb17842b66fb41309981c1ce25543 Mon Sep 17 00:00:00 2001 From: sight <26325820+Sight-wcg@users.noreply.github.com> Date: Fri, 5 Sep 2025 00:24:21 +0800 Subject: [PATCH] update --- src/modules/dropdown.js | 5 ++++- src/modules/lay.js | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/modules/dropdown.js b/src/modules/dropdown.js index ef558f55..6cb5ccbb 100644 --- a/src/modules/dropdown.js +++ b/src/modules/dropdown.js @@ -395,13 +395,16 @@ layui.define(['i18n', 'jquery', 'laytpl', 'lay', 'util'], function(exports) { var options = that.config; var mainElem = thisModule.findMainElem(id); + if(resizeObserver){ + resizeObserver.unobserve(options.elem[0]); + } + // 若存在已打开的面板元素,则移除 if (mainElem[0]) { mainElem.prev('.' + STR_ELEM_SHADE).remove(); // 先移除遮罩 mainElem.remove(); options.elem.removeData(MOD_INDEX_OPENED); if(resizeObserver){ - resizeObserver.unobserve(options.elem[0]); resizeObserver.unobserve(mainElem[0]); } delete dropdown.thisId; diff --git a/src/modules/lay.js b/src/modules/lay.js index 86c5a4b0..8a505a80 100644 --- a/src/modules/lay.js +++ b/src/modules/lay.js @@ -876,7 +876,7 @@ return null; } - var ATTR_NAME = 'lay-resizeobserver-key'; + var ATTR_NAME = 'lay-' + namespace + '-resizeobserver-key'; var handlerCache = {}; var o = new ResizeObserver(function (entries) { @@ -905,6 +905,7 @@ element.setAttribute(ATTR_NAME, attrValue); } + // 使用同一个观察者实例多次观察同一个元素,不会重复添加 handlerCache[attrValue] = callback; o.observe(element); }, @@ -924,11 +925,20 @@ delete handlerCache[attrValue]; } + element.removeAttribute(ATTR_NAME); o.unobserve(element); }, disconnect: function () { + for (var key in handlerCache) { + if (lay.hasOwn(handlerCache,key)) { + delete handlerCache[key]; + var elem = document.querySelector('[' + ATTR_NAME + '="' + key + '"]'); + if(elem){ + elem.removeAttribute(ATTR_NAME); + } + } + } o.disconnect(); - handlerCache = {}; } }); };