vue環境如何實現div focus blur焦點事件

vue div focus blur焦點事件

  • onfocus獲取焦點事件與onblur失去焦點事件本身是input類用的
  • input類如果是點擊後才加載的話需要做個延時器,否則會報錯
setTimeout(()=>{
    this.$refs.aside.focus()
},100)

div想支持則需要加上tabindex="0"屬性//0或者以上

但是在vue環境中,加上這個也不支持,而移動端無法使用鼠標事件

<div tabindex="0" hidefocus="true" ref="aside" class="aside" @click="dialaing()" @blur='()=>{dialaingIsShow =false}'>
    <div v-show="dialaingIsShow" class="dialaing">dsadasd</div>
</div>
dialaing(){
       this.$refs.aside.focus()
       this.dialaingIsShow = true
},

就可以瞭

vue div 獲得焦點和失去焦點

<div tabindex="0" @blur="aside1_hide()" ref="aside1" class="aside" style="width: 200px; overflow: scroll;">
    <!-- background-color="#23303E" transparent -->
    <el-menu background-color="#23303E" text-color="#fff" active-text-color="#fff">
       ...
    </el-menu>
</div>
left_click: function() {
      if (!this.left_show) {
        this.$refs.aside1.style.left = "0"
        this.$refs.aside1.focus()  //獲得焦點
        this.left_show = true
      } else {
        this.aside1_hide()
      }
},
 
aside1_hide:function () {
      this.$refs.aside1.style.left = "-200px"
      this.left_show = false
},
 
@media screen and (min-width: 1200px) {
  .aside {
    position: static;
    width: 200px;
    height: 100vh;
    margin: 0;
    padding: 0;
    background-color: #23303E;
    z-index: 100;
    /*移動時的過度效果*/
    transition: left 500ms ease;
    color: #fff;
  }
}
 
@media screen and (max-width: 1200px) {
  /*隱藏在左邊*/
  .aside {
    position: fixed;
    /*相對於窗口固定定位*/
    top: 0;
    left: -200px;
    /*隱藏在左邊*/
    width: 200px;
    height: 100vh;
    margin: 0;
    padding: 0;
    background-color: #23303E;
    z-index: 100;
    /*移動時的過度效果*/
    transition: left 500ms ease;
 
    /*padding: 36px;*/
    color: #fff;
  }
}
/*可以滾動,但隱藏滾動條*/
.aside::-webkit-scrollbar {
  display: none;
}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: