最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

element-ui中的clickoutside點(diǎn)擊空白隱藏元素

 更新時(shí)間:2023年03月06日 11:33:48   作者:竹業(yè)  
這篇文章主要為大家介紹了element-ui中的clickoutside點(diǎn)擊空白隱藏元素示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

大家好,今天主要比較簡(jiǎn)單的了解下clickoutside指令的作用,主要作用是自己手動(dòng)實(shí)現(xiàn)類似下拉的組件,想要點(diǎn)擊空白隱藏下拉框,可以使用該指令,看下element-ui怎么實(shí)現(xiàn)的。

基本使用

點(diǎn)擊div,closeBox方法不會(huì)執(zhí)行,點(diǎn)擊空白才執(zhí)行

<template>
  <div class="app">
    <div v-show="isShowBox" v-clickoutside="closeBox" class="box"></div>
  </div>
</template>
<script>
import Clickoutside from 'element-ui/src/utils/clickoutside'
export default {
  directives: {
    Clickoutside
  },
  data() {
    return {
      isShowBox: true
    }
  },
  methods: {
    closeBox() {
      this.isShowBox = false;
    }
  }
};

源碼實(shí)現(xiàn)

  • 在document元素上注冊(cè)'mousedown'和'mouseup'事件,mouseup時(shí)會(huì)執(zhí)行使用了該指令元素上的documentHandler方法
  • documentHandler方法里判斷點(diǎn)擊的元素是否為使用了指令的元素,不是就執(zhí)行closeBox的方法
import Vue from 'vue';
import { on } from 'element-ui/src/utils/dom';
const nodeList = [];
const ctx = '@@clickoutsideContext';
let startClick;
let seed = 0;
on(document, 'mousedown', e => (startClick = e));
on(document, 'mouseup', e => {
  nodeList.forEach(node => node[ctx].documentHandler(e, startClick));
});
function createDocumentHandler(el, binding, vnode) {
  return function(mouseup = {}, mousedown = {}) {
    if (!vnode ||
      !vnode.context ||
      !mouseup.target ||
      !mousedown.target ||
      el.contains(mouseup.target) ||
      el.contains(mousedown.target) ||
      el === mouseup.target ||
      (vnode.context.popperElm &&
      (vnode.context.popperElm.contains(mouseup.target) ||
      vnode.context.popperElm.contains(mousedown.target)))) return;
    if (binding.expression &&
      el[ctx].methodName &&
      vnode.context[el[ctx].methodName]) {
      vnode.context[el[ctx].methodName]();
    } else {
      el[ctx].bindingFn && el[ctx].bindingFn();
    }
  };
}
/**
 * v-clickoutside
 * @desc 點(diǎn)擊元素外面才會(huì)觸發(fā)的事件
 * @example
 * ```vue
 * <div v-element-clickoutside="handleClose">
 * ```
 */
export default {
  bind(el, binding, vnode) {
    nodeList.push(el);
    const id = seed++;
    el[ctx] = {
      id,
      documentHandler: createDocumentHandler(el, binding, vnode),
      methodName: binding.expression,
      bindingFn: binding.value
    };
  },
  update(el, binding, vnode) {
    el[ctx].documentHandler = createDocumentHandler(el, binding, vnode);
    el[ctx].methodName = binding.expression;
    el[ctx].bindingFn = binding.value;
  },
  unbind(el) {
    let len = nodeList.length;
    for (let i = 0; i < len; i++) {
      if (nodeList[i][ctx].id === el[ctx].id) {
        nodeList.splice(i, 1);
        break;
      }
    }
    delete el[ctx];
  }
};

最后

多看源碼,才能提高效率,以上就是element-ui中的clickoutside點(diǎn)擊空白隱藏元素的詳細(xì)內(nèi)容,更多關(guān)于element-ui clickoutside空白隱藏的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue實(shí)現(xiàn)微信瀏覽器左上角返回按鈕攔截功能

    vue實(shí)現(xiàn)微信瀏覽器左上角返回按鈕攔截功能

    這篇文章主要介紹了vue實(shí)現(xiàn)微信瀏覽器左上角返回按鈕攔截功能,本文通過(guò)實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 前端vue中的拖拽知識(shí)詳解

    前端vue中的拖拽知識(shí)詳解

    這篇文章主要介紹了前端拖拽功能的基本知識(shí),并詳細(xì)講解了如何在Vue3工程中實(shí)現(xiàn)拖拽指令,拖拽功能涉及HTML、CSS和JavaScript的綜合運(yùn)用,需要的朋友可以參考下
    2025-01-01
  • vue使用watch 觀察路由變化,重新獲取內(nèi)容

    vue使用watch 觀察路由變化,重新獲取內(nèi)容

    本篇文章主要介紹了vue使用watch 觀察路由變化,重新獲取內(nèi)容 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • vue.js中$watch的用法示例

    vue.js中$watch的用法示例

    這篇文章為大家詳細(xì)介紹了vue.js中$watch的用法,文中給出了示例代碼,相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友們可以一起看看吧。
    2016-10-10
  • 一起來(lái)學(xué)習(xí)Vue的組件間通信方式

    一起來(lái)學(xué)習(xí)Vue的組件間通信方式

    這篇文章主要為大家詳細(xì)介紹了Vue的組件間通信方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Vue-element中el-input輸入卡頓問(wèn)題的解決

    Vue-element中el-input輸入卡頓問(wèn)題的解決

    這篇文章主要介紹了Vue-element中el-input輸入卡頓問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue實(shí)現(xiàn)消息列表向上無(wú)縫滾動(dòng)效果

    vue實(shí)現(xiàn)消息列表向上無(wú)縫滾動(dòng)效果

    本文主要實(shí)現(xiàn)vue項(xiàng)目中,消息列表逐條向上無(wú)縫滾動(dòng),每條消息展示10秒后再滾動(dòng),為了保證用戶能看清消息主題,未使用第三方插件,本文實(shí)現(xiàn)方法比較簡(jiǎn)約,需要的朋友可以參考下
    2024-06-06
  • 解決vue單頁(yè)面應(yīng)用中動(dòng)態(tài)修改title問(wèn)題

    解決vue單頁(yè)面應(yīng)用中動(dòng)態(tài)修改title問(wèn)題

    這篇文章主要介紹了解決vue單頁(yè)面應(yīng)用中動(dòng)態(tài)修改title問(wèn)題,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • vue打印瀏覽器頁(yè)面功能的兩種實(shí)現(xiàn)方法

    vue打印瀏覽器頁(yè)面功能的兩種實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于vue打印瀏覽器頁(yè)面功能的兩種實(shí)現(xiàn)方法,這個(gè)功能其實(shí)也是自己學(xué)習(xí)到的,做完也有一段時(shí)間了,一直想記錄總結(jié)一下,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 深入了解Vue3中props的原理與使用

    深入了解Vue3中props的原理與使用

    props指父組件往子組件中傳入?yún)?shù),這篇文章主要為大家介紹了vue3中props的原理與使用,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2023-05-05

最新評(píng)論

阳城县| 和平县| 余庆县| 兴宁市| 滦南县| 恩平市| 常宁市| 溆浦县| 新邵县| 濮阳县| 淮北市| 松溪县| 临汾市| 曲阳县| 冷水江市| 平昌县| 宜黄县| 锡林郭勒盟| 高淳县| 司法| 洮南市| 锡林浩特市| 北流市| 淮安市| 江津市| 新疆| 绥棱县| 兴海县| 墨竹工卡县| 连江县| 武定县| 汤原县| 华蓥市| 时尚| 滨海县| 瑞昌市| 乌恰县| 柳河县| 余江县| 鹤壁市| 汉源县|