Vue组件之Tooltip的示例代码
发布时间:2020-12-17 02:45:45 所属栏目:百科 来源:网络整理
导读:前言 本文主要Alert 组件的大致框架, 提供少量可配置选项。 旨在大致提供思路 tooltip 常用于展示鼠标 hover 时的提示信息。 模板结构 大致结构DOM结构 一个div 包含 箭头 及 气泡内容。 v-bind中可选tooltip位置,是否禁用,及显示隐藏 slot 差值供自定义
前言本文主要Alert 组件的大致框架, 提供少量可配置选项。 旨在大致提供思路 tooltip常用于展示鼠标 hover 时的提示信息。 模板结构大致结构DOM结构 一个div 包含 箭头 及 气泡内容。 v-bind中可选tooltip位置,是否禁用,及显示隐藏 slot 差值供自定义 默认接收content内容 scriptexport 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(); } }; export default EventListener;
封装的事件监听 使用使用content属性来决定hover时的提示信息。由placement属性决定展示效果:placement属性值为:方向-对齐位置;四个方向:top、left、right、bottom。trigger属性用于设置触发tooltip的方式,默认为hover。 content内容分发设置一个名为content的slot。
Attributes
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |