From 3be4fad9e183b9243c1920d112252df813556e6a Mon Sep 17 00:00:00 2001 From: java110 <928255095@qq.com> Date: Fri, 24 Apr 2020 22:53:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=91=E9=99=8B=E7=9A=84co?= =?UTF-8?q?pyright=20=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/frameComponents/menu/menu.js | 19 ++++- public/vcCore/vcFramework.js | 120 ++++++++++++++++++++++++++-- 2 files changed, 130 insertions(+), 9 deletions(-) diff --git a/public/frameComponents/menu/menu.js b/public/frameComponents/menu/menu.js index 0a2e6ec74..ef174f0d3 100644 --- a/public/frameComponents/menu/menu.js +++ b/public/frameComponents/menu/menu.js @@ -11,6 +11,17 @@ mounted: function () { this._initSysInfo(); this.getMenus(); + let _menuDiv = document.getElementById('menu-nav'); + vcFramework.eleResize.on(_menuDiv, function () { + //console.log('resize', '大小修改了'); + vcFramework._fix_height(_menuDiv); + }); + window.onscroll = function () { + //为了保证兼容性,这里取两个值,哪个有值取哪一个 + //scrollTop就是触发滚轮事件时滚轮的高度 + let _menuDivb = document.getElementById('menu-nav'); + vcFramework._fix_height(_menuDivb); + } }, methods: { _initSysInfo: function () { @@ -21,9 +32,9 @@ } this.logo = sysInfo.logo; }, - _gotoIndex:function(){ + _gotoIndex: function () { vc.jumpToPage("/") - }, + }, getMenus: function () { var _tmpMenus = vc.getMenus(); @@ -97,7 +108,7 @@ miniMenu: function () { //菜单默认为打开方式 - if(!vc.notNull(vc.getMenuState())){ + if (!vc.notNull(vc.getMenuState())) { vc.setMenuState('ON'); } @@ -108,7 +119,7 @@ $("body").toggleClass("mini-navbar"); vc.setMenuState('OFF'); }, - _gotoPage:function(_href){ + _gotoPage: function (_href) { vc.jumpToPage(_href); } diff --git a/public/vcCore/vcFramework.js b/public/vcCore/vcFramework.js index a05493b8d..be42b5715 100644 --- a/public/vcCore/vcFramework.js +++ b/public/vcCore/vcFramework.js @@ -1788,22 +1788,132 @@ vc 校验 工具类 -method } })(window.vcFramework); +/** + * 监听div 大小 + */ +(function (vcFramework) { + + vcFramework.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 = vcFramework.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', vcFramework.eleResize._handleResize); + } + }; + if (document.attachEvent) {//ie9-10 + vcFramework.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 + }); + }; + vcFramework.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 { + vcFramework.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 = vcFramework.eleResize._createResizeTrigger(ele); + ele.__resizeTrigger__ = obj; + obj.__resizeElement__ = ele; + } + handlers.push({ + handler: handler, + context: context + }); + }; + vcFramework.eleResize.off = function (ele, handler, context) { + var handlers = ele.__z_resizeListeners; + if (handlers) { + vcFramework.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; + } + } + } + } +})(window.vcFramework); + //全屏处理 这个后面可以关掉 (function (vcFramework) { - vcFramework._fix_height = () => { + vcFramework._fix_height = (_targetDiv) => { //只要窗口高度发生变化,就会进入这里面,在这里就可以写,回到聊天最底部的逻辑 let _vcPageHeight = document.getElementsByClassName('vc-page-height')[0]; //浏览器可见高度 - let _minHeight = document.documentElement.clientHeight; - let _scollHeight = document.body.scrollHeight; + let _minHeight = _targetDiv.clientHeight; + let _scollHeight = _targetDiv.scrollHeight; if (_scollHeight < _minHeight) { _scollHeight = _minHeight } _vcPageHeight.style.minHeight = _scollHeight + 'px'; - console.log('是否设置高度', _vcPageHeight.style.minHeight); + //console.log('是否设置高度', _vcPageHeight.style.minHeight); } - vcFramework._fix_height(); })(window.vcFramework);