最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

Vue組件之Tooltip的示例代碼

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:27:29
文檔

Vue組件之Tooltip的示例代碼

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

前言

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

tooltip

常用于展示鼠標(biāo) hover 時(shí)的提示信息。

模板結(jié)構(gòu)

<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>

大致結(jié)構(gòu)DOM結(jié)構(gòu) 一個(gè)div 包含 箭頭 及 氣泡內(nèi)容。

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

slot 差值供自定義 默認(rèn)接收content內(nèi)容

script

import EventListener from '../utils/EventListener.js';

export default {
 props: {
 // 需要監(jiān)聽(tīng)的事件
 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 {
 // 通過(guò)計(jì)算所得 氣泡位置 
 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];
 // 通過(guò)placement計(jì)算出位子
 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.");
 // 獲取監(jiān)聽(tīng)對(duì)象
 const triger = this.$refs.trigger.children[0];
 // 根據(jù)trigger監(jiān)聽(tīng)特定事件
 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;
 },
 // 在組件銷毀前移除監(jiān)聽(tīng),釋放內(nèi)存
 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;

封裝的事件監(jiān)聽(tīng)

使用

使用content屬性來(lái)決定hover時(shí)的提示信息。由placement屬性決定展示效果:placement屬性值為:方向-對(duì)齊位置;四個(gè)方向:top、left、right、bottom。trigger屬性用于設(shè)置觸發(fā)tooltip的方式,默認(rèn)為hover。

<d-tooltip content="我是tooltip">
 <d-button type="text">鼠標(biāo)移動(dòng)到我上面試試</d-button>
</d-tooltip>
<d-tooltip content="我是tooltip" trigger="click">
 <d-button type="text">點(diǎn)我試試</d-button>
</d-tooltip>

content內(nèi)容分發(fā)

設(shè)置一個(gè)名為content的slot。

<d-tooltip>
 <d-button type="text">鼠標(biāo)移動(dòng)到我上面試試</d-button>
 <p slot="content" class="tooltip-content">我是內(nèi)容分發(fā)的conent。</p>
</d-tooltip>

Attributes

參數(shù) 說(shuō)明 類型 可選值 默認(rèn)值
content 顯示的內(nèi)容,也可以通過(guò) slot#content 傳入 DOM String
placement Tooltip 的出現(xiàn)位置 String top/right/bottom/left top
trigger tooltip觸發(fā)方式 String hover

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Vue組件之Tooltip的示例代碼

Vue組件之Tooltip的示例代碼:前言 本文主要Alert 組件的大致框架, 提供少量可配置選項(xiàng)。 旨在大致提供思路 tooltip 常用于展示鼠標(biāo) hover 時(shí)的提示信息。 模板結(jié)構(gòu) <template> <div style=position:relative;> <span ref=trig
推薦度:
標(biāo)簽: Tooltip 組件的 tooltip的
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top