国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
主站蜘蛛池模板: 欧美我不卡 | 国产成人一区在线播放 | 久久er99 | 久久久国产这里有的是精品 | 精品在线网站 | 久久99精品一区二区三区 | 久久久久国产成人精品亚洲午夜 | 久久www免费人成精品香蕉 | 看全色黄大色黄女片爽毛片 | 国产日韩欧美一区 | 亚洲欧美自拍一区 | 黄色毛片在线观看 | 精品一区二区三区3d动漫 | 久久噜噜 | 国产精品日韩欧美一区二区三区 | 亚洲欧美另类专区 | 国产在线视频在线 | 亚洲天堂一区二区三区 | 在线观看国产一区 | 亚洲精品成人 | 国产第一页视频 | 国产精品三级一区二区 | 欧美精品色精品一区二区三区 | 亚洲国产精久久久久久久 | 欧美日韩亚洲高清不卡一区二区三区 | 欧美网址在线观看 | 日本免费一二三区 | 日韩国产一区二区 | 国产91精品一区二区麻豆亚洲 | 日韩在线免费播放 | 久久国产精品一区二区 | 国产亚洲欧美日韩综合另类 | 国产91原创 | 亚洲欧美日韩中文v在线 | 精品在线观看国产 | 亚洲国产成人久久一区久久 | 国产免费精彩视频 | 亚洲精国产一区二区三区 | 日韩三级网址 | 九九操视频 | a级毛片在线免费观看 |