<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成人精品日韩一区18p| 国产成人精品亚洲| 四虎永久免费影院| 国产免费A∨在线播放| 亚洲一级片免费看| 鲁丝片一区二区三区免费| 亚洲精品国产字幕久久不卡| 国产一区二区免费| 亚洲精品网站在线观看你懂的| 16女性下面无遮挡免费| 亚洲综合色婷婷在线观看| 国产免费看插插插视频| 一级白嫩美女毛片免费| 亚洲成AV人片在| 日韩版码免费福利视频| 国产亚洲欧美日韩亚洲中文色| 亚洲第一黄片大全| 99在线视频免费| 亚洲暴爽av人人爽日日碰| 亚洲人妻av伦理| 国精产品一区一区三区免费视频| 久久亚洲精品中文字幕| 大地资源免费更新在线播放| 一区二区三区免费在线视频| 亚洲AV无码一区二区二三区软件| 91手机看片国产永久免费| 日韩亚洲人成网站| 久久综合日韩亚洲精品色| 曰批全过程免费视频在线观看| 四虎影视永久在线精品免费| 亚洲av无码片在线播放| 成人在线免费观看| 搡女人免费免费视频观看| 亚洲情A成黄在线观看动漫软件| 国产亚洲情侣一区二区无| 67194成手机免费观看| 免费毛片毛片网址| 亚洲人成网站在线观看播放青青|