<template>
  <el-dialog
    :visible="visible"
    :append-to-body="true"
    :lock-scroll="true"
    @open="handleOpen"
    @close="handleClose"
  >
    <!-- 内容 -->
  </el-dialog>
</template>
 
<script>
export default {
  props: {
    visible: {
      type: Boolean,
      default: false
    }
  },
  methods: {
    handleOpen() {
      // 防止页面滚动
      this.scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
      document.body.style.position = 'fixed';
      document.body.style.top = `-${this.scrollTop}px`;
      document.body.classList.add('dialog-open');
    },
    handleClose() {
      // 恢复页面滚动
      document.body.style.position = '';
      document.body.style.top = '';
      document.body.classList.remove('dialog-open');
      document.body.scrollTop = document.documentElement.scrollTop = this.scrollTop;
    }
  }
};
</script>
 
<style>
.dialog-open {
  overflow: hidden;
}
</style>这个代码实例展示了如何在Vue中使用Element UI的el-dialog组件时处理双滚动条和页面抖动的问题。通过监听对话框的打开和关闭事件,我们在handleOpen和handleClose方法中分别实现了禁用页面滚动和恢复页面滚动的逻辑,从而避免了这些问题。