commit
915e06db63
1 changed files with 24 additions and 1 deletions
|
@ -26,7 +26,7 @@
|
|||
<script>
|
||||
import Icon from '../icon/icon.vue';
|
||||
import Render from '../base/render';
|
||||
import { oneOf } from '../../utils/assist';
|
||||
import { oneOf, MutationObserver } from '../../utils/assist';
|
||||
import Emitter from '../../mixins/emitter';
|
||||
import elementResizeDetectorMaker from 'element-resize-detector';
|
||||
|
||||
|
@ -310,6 +310,16 @@
|
|||
},
|
||||
handleResize(){
|
||||
this.updateNavScroll();
|
||||
},
|
||||
isInsideHiddenElement () {
|
||||
let parentNode = this.$el.parentNode;
|
||||
while(parentNode) {
|
||||
if (parentNode.style.display === 'none') {
|
||||
return parentNode;
|
||||
}
|
||||
parentNode = parentNode.parentNode;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
|
@ -329,9 +339,22 @@
|
|||
this.showSlot = this.$slots.extra !== undefined;
|
||||
this.observer = elementResizeDetectorMaker();
|
||||
this.observer.listenTo(this.$refs.navWrap, this.handleResize);
|
||||
|
||||
const hiddenParentNode = this.isInsideHiddenElement();
|
||||
if (hiddenParentNode) {
|
||||
this.mutationObserver = new MutationObserver(() => {
|
||||
if (hiddenParentNode.style.display !== 'none') {
|
||||
this.updateBar();
|
||||
this.mutationObserver.disconnect();
|
||||
}
|
||||
});
|
||||
|
||||
this.mutationObserver.observe(hiddenParentNode, { attributes: true, childList: true, characterData: true, attributeFilter: ['style'] });
|
||||
}
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.observer.removeListener(this.$refs.navWrap, this.handleResize);
|
||||
this.mutationObserver.disconnect();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
|
Loading…
Add table
Reference in a new issue