el-select中使用el-tooltip時,在下拉滾動時整個網頁會出現滾動條,並抖動


問題:當使用組件el-select時,如果在el-option上使用el-tooltip組件時,在下拉選項比較多時進行滾動,整個網頁會出現抖動,並出現滾動條。

代碼如下:

<el-select v-model="addForm.leader_id" placeholder="請選擇科室負責人" filterable>
   <el-option v-for="item in doctorList" :key="item.id" :label="item.realname" :value="item.id">
       <el-tooltip placement="left">
           <div slot="content">
                姓名:{{item.realname}}<br><br>
                角色:{{item | zroleTypeName}}<br><br>
                工號:{{item.username}}<br><br>
                電話:{{item.phone}}
            </div>
            <div>{{ item.realname }}</div>
        </el-tooltip>
   </el-option>
</el-select>
                         

 解決辦法:

第一步:在main.js自定義指令監聽el-select的滾動事件以及滾動結束事件,代碼如下:

Vue.directive('scrollEvent', {//監聽滾動事件
  bind(el, binding) {

    // 獲取element-ui定義好的scroll盒子
    const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap');

    SELECTWRAP_DOM.addEventListener('scroll', function() {

      binding.value();

    });
  }
})

Vue.directive('scrollEnd', {//監聽滾動結束事件
  bind(el, binding) {

    // 獲取element-ui定義好的scroll盒子
    const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap');
    var timer;
    SELECTWRAP_DOM.addEventListener('scroll', function() {
      if (timer) clearTimeout(timer);
      timer = setTimeout(function(){
        binding.value();
      },1000);

    });
  }
})

 第二步:在使用了el-tooltip組件的el-select上添加v-scroll-event以及v-scroll-end監聽事件,代碼如下:

<el-select v-model="addForm.leader_id" v-scroll-event="listenScroll" v-scroll-end="endScroll" placeholder="請選擇科室負責人" filterable>
  <el-option v-for="item in doctorList" :key="item.id" :label="item.realname" :value="item.id">
     <el-tooltip placement="left">
       <div slot="content">
         姓名:{{item.realname}}<br><br>
         角色:{{item | zroleTypeName}}<br><br>
         工號:{{item.username}}<br><br>
         電話:{{item.phone}}
       </div>
       <div>{{ item.realname }}</div>
     </el-tooltip>
   </el-option>
</el-select>  

 第三步:在methods中定義listenScroll以及endScroll方法,代碼如下:

listenScroll () {
  document.querySelector("html").style["overflow"] = "hidden";
},
endScroll () {
  setTimeout(function (){
    document.querySelector("html").style["overflow"] = "auto";
  },1000);
},

 這是我解決這個問題的方法,如果你們有其他方法,或對該問題有詳細的認識,希望能留言告知,謝謝 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM