<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Vue組件之Tooltip的示例代碼

        來源:懂視網 責編:小采 時間:2020-11-27 22:27:29
        文檔

        Vue組件之Tooltip的示例代碼

        Vue組件之Tooltip的示例代碼:前言 本文主要Alert 組件的大致框架, 提供少量可配置選項。 旨在大致提供思路 tooltip 常用于展示鼠標 hover 時的提示信息。 模板結構 <template> <div style=position:relative;> <span ref=trig
        推薦度:
        導讀Vue組件之Tooltip的示例代碼:前言 本文主要Alert 組件的大致框架, 提供少量可配置選項。 旨在大致提供思路 tooltip 常用于展示鼠標 hover 時的提示信息。 模板結構 <template> <div style=position:relative;> <span ref=trig

        前言

        本文主要Alert 組件的大致框架, 提供少量可配置選項。 旨在大致提供思路

        tooltip

        常用于展示鼠標 hover 時的提示信息。

        模板結構

        <template>
         <div style="position:relative;">
         <span ref="trigger">
         <slot>
         </slot>
         </span>
         <div class="tooltip"
         v-bind:class="{
         'top': placement === 'top',
         'left': placement === 'left',
         'right': placement === 'right',
         'bottom': placement === 'bottom',
         'disable': type === 'disable',
         'delete': type === 'delete',
         'visible': show === true 
         }"
         ref="popover"
         role="tooltip">
         <div class="tooltip-arrow"></div>
         <div class="tooltip-inner">
         <slot name="content" v-html="content"></slot>
         </div>
         </div>
         </div>
        </template>
        

        大致結構DOM結構 一個div 包含 箭頭 及 氣泡內容。

        v-bind中可選tooltip位置,是否禁用,及顯示隱藏

        slot 差值供自定義 默認接收content內容

        script

        import EventListener from '../utils/EventListener.js';
        
        export default {
         props: {
         // 需要監聽的事件
         trigger: {
         type: String,
         default: 'click'
         },
         effect: {
         type: String,
         default: 'fadein'
         },
         title: {
         type: String
         },
         // toolTip消息提示
         content: {
         type: String
         },
         header: {
         type: Boolean,
         default: true
         },
         placement: {
         type: String
         }
         },
         data() {
         return {
         // 通過計算所得 氣泡位置 
         position: {
         top: 0,
         left: 0
         },
         show: true
         };
         },
         watch: {
         show: function(val) {
         if (val) {
         const popover = this.$refs.popover;
         const triger = this.$refs.trigger.children[0];
         // 通過placement計算出位子
         switch (this.placement) {
         case 'top' :
         this.position.left = triger.offsetLeft - popover.offsetWidth / 2 + triger.offsetWidth / 2;
         this.position.top = triger.offsetTop - popover.offsetHeight;
         break;
         case 'left':
         this.position.left = triger.offsetLeft - popover.offsetWidth;
         this.position.top = triger.offsetTop + triger.offsetHeight / 2 - popover.offsetHeight / 2;
         break;
         case 'right':
         this.position.left = triger.offsetLeft + triger.offsetWidth;
         this.position.top = triger.offsetTop + triger.offsetHeight / 2 - popover.offsetHeight / 2;
         break;
         case 'bottom':
         this.position.left = triger.offsetLeft - popover.offsetWidth / 2 + triger.offsetWidth / 2;
         this.position.top = triger.offsetTop + triger.offsetHeight;
         break;
         default:
         console.log('Wrong placement prop');
         }
         popover.style.top = this.position.top + 'px';
         popover.style.left = this.position.left + 'px';
         }
         }
         },
         methods: {
         toggle() {
         this.show = !this.show;
         }
         },
         mounted() {
         if (!this.$refs.popover) return console.error("Couldn't find popover ref in your component that uses popoverMixin.");
         // 獲取監聽對象
         const triger = this.$refs.trigger.children[0];
         // 根據trigger監聽特定事件
         if (this.trigger === 'hover') {
         this._mouseenterEvent = EventListener.listen(triger, 'mouseenter', () => {
         this.show = true;
         });
         this._mouseleaveEvent = EventListener.listen(triger, 'mouseleave', () => {
         this.show = false;
         });
         } else if (this.trigger === 'focus') {
         this._focusEvent = EventListener.listen(triger, 'focus', () => {
         this.show = true;
         });
         this._blurEvent = EventListener.listen(triger, 'blur', () => {
         this.show = false;
         });
         } else {
         this._clickEvent = EventListener.listen(triger, 'click', this.toggle);
         }
         this.show = !this.show;
         },
         // 在組件銷毀前移除監聽,釋放內存
         beforeDestroy() {
         if (this._blurEvent) {
         this._blurEvent.remove();
         this._focusEvent.remove();
         }
         if (this._mouseenterEvent) {
         this._mouseenterEvent.remove();
         this._mouseleaveEvent.remove();
         }
         if (this._clickEvent) this._clickEvent.remove();
         }
        };
        
        
        // EventListener.js
        const EventListener = {
         /**
         * Listen to DOM events during the bubble phase.
         *
         * @param {DOMEventTarget} target DOM element to register listener on.
         * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
         * @param {function} callback Callback function.
         * @return {object} Object with a `remove` method.
         */
         listen(target, eventType, callback) {
         if (target.addEventListener) {
         target.addEventListener(eventType, callback, false);
         return {
         remove() {
         target.removeEventListener(eventType, callback, false);
         }
         };
         } else if (target.attachEvent) {
         target.attachEvent('on' + eventType, callback);
         return {
         remove() {
         target.detachEvent('on' + eventType, callback);
         }
         };
         }
         }
        };
        
        export default EventListener;
        

        封裝的事件監聽

        使用

        使用content屬性來決定hover時的提示信息。由placement屬性決定展示效果:placement屬性值為:方向-對齊位置;四個方向:top、left、right、bottom。trigger屬性用于設置觸發tooltip的方式,默認為hover。

        <d-tooltip content="我是tooltip">
         <d-button type="text">鼠標移動到我上面試試</d-button>
        </d-tooltip>
        <d-tooltip content="我是tooltip" trigger="click">
         <d-button type="text">點我試試</d-button>
        </d-tooltip>
        

        content內容分發

        設置一個名為content的slot。

        <d-tooltip>
         <d-button type="text">鼠標移動到我上面試試</d-button>
         <p slot="content" class="tooltip-content">我是內容分發的conent。</p>
        </d-tooltip>

        Attributes

        參數 說明 類型 可選值 默認值
        content 顯示的內容,也可以通過 slot#content 傳入 DOM String
        placement Tooltip 的出現位置 String top/right/bottom/left top
        trigger tooltip觸發方式 String hover

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Vue組件之Tooltip的示例代碼

        Vue組件之Tooltip的示例代碼:前言 本文主要Alert 組件的大致框架, 提供少量可配置選項。 旨在大致提供思路 tooltip 常用于展示鼠標 hover 時的提示信息。 模板結構 <template> <div style=position:relative;> <span ref=trig
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲AV日韩AV永久无码绿巨人| 久久99国产乱子伦精品免费| 成年女人午夜毛片免费视频| 亚洲综合视频在线观看| 一区二区免费视频| 久久夜色精品国产噜噜噜亚洲AV| 久久久久成人片免费观看蜜芽| 久久精品视频亚洲| 91高清免费国产自产| 亚洲字幕在线观看| 美女视频黄免费亚洲| 亚洲色大成网站www尤物| 精品国产免费一区二区| 美女被免费网站在线视频免费 | 无码人妻一区二区三区免费n鬼沢| 亚洲中文字幕无码永久在线 | 亚洲日本在线观看视频| 三年片免费观看大全国语| 久久久久久亚洲精品| 亚洲欧洲免费无码| 亚洲JIZZJIZZ妇女| 中文字幕亚洲日本岛国片| 欧洲人成在线免费| 亚洲国产精品免费观看 | 久久午夜夜伦鲁鲁片无码免费| 久久久久久久久亚洲| 91视频国产免费| 猫咪免费人成在线网站| 国产AV无码专区亚洲AV男同| 成人浮力影院免费看| 豆国产96在线|亚洲| 亚洲欧洲国产精品香蕉网| www视频在线观看免费| 亚洲AV无码专区亚洲AV桃| 国产午夜亚洲精品午夜鲁丝片| 一级毛片在线免费观看| 亚洲日韩精品无码专区加勒比☆ | jizz在线免费观看| 亚洲成a人片在线观看中文!!!| 国产免费爽爽视频免费可以看| 国产午夜精品免费一区二区三区|