vue 组件封装 | 随鼠标移动的信息框 (含监听鼠标移动、移出事件,获取元素的宽高、获取浏览器的宽高)

简介: vue 组件封装 | 随鼠标移动的信息框 (含监听鼠标移动、移出事件,获取元素的宽高、获取浏览器的宽高)

s-mousetip.vue

<template>
    <div ref="mouseTip" class="mouseTipClass" :style="mouseTipStyle">
        <slot></slot>
    </div>
</template>
<script>
    export default {
        data() {
            return {
                mouseTipStyle: {}
            }
        },
        mounted() {
            // 监听鼠标在浏览器可见区域中移动
            window.addEventListener('mousemove', this.mousemove)
            // 监听鼠标移出浏览器可见区域
            window.addEventListener('mouseout', this.mouseout)
        },
        methods: {
            mouseout() {
                this.$set(this.mouseTipStyle, 'display', 'none')
            },
            mousemove(e) {
                this.$set(this.mouseTipStyle, 'display', 'block')
                // 获取信息框的宽度
                let mouseTipWidth = window.getComputedStyle(this.$refs.mouseTip).width
                // 获取信息框的高度
                let mouseTipHeight = window.getComputedStyle(this.$refs.mouseTip).height
                // 当鼠标上方容不下信息框时,信息框改在鼠标下方显示
                if (e.clientY < Number(mouseTipHeight.replace('px', '')) + 20) {
                    this.$set(this.mouseTipStyle, 'top', e.clientY + 20 + 'px')
                } else {
                    this.$set(this.mouseTipStyle, 'top', e.clientY - 36 + 'px')
                }
                // 当鼠标右侧容不下信息框时,信息框改在鼠标左边显示
                if (e.clientX > document.documentElement.clientWidth - Number(mouseTipWidth.replace('px', ''))) {
                    this.$set(this.mouseTipStyle, 'left', e.clientX - Number(mouseTipWidth.replace('px', '')) + 'px')
                } else {
                    this.$set(this.mouseTipStyle, 'left', e.clientX + 'px')
                }
            },
        }
    }
</script>
<style scoped>
    .mouseTipClass {
        display: none;
        position: fixed;
        z-index: 9999;
        background: white;
        border: 1px solid gray;
        padding: 4px;
        border-radius: 4px;
    }
</style>

使用方法

在  s-mousetip 标签中,输入任何想随鼠标移动的内容即可(因是通过插槽实现,可以是文字、图片、组件等任意内容)

<template>
    <s-mousetip>我是随鼠标移动的信息框</s-mousetip>
</template>
目录
相关文章
|
2天前
|
JavaScript 前端开发 开发者
浏览器事件机制详解
浏览器事件机制详解
|
2天前
|
前端开发 JavaScript
js 进入浏览器全屏(F11效果)、退出全屏、指定元素全屏、判断当前是否全屏、监听浏览器全屏事件、定义全屏时的css样式(全屏伪类)
js 进入浏览器全屏(F11效果)、退出全屏、指定元素全屏、判断当前是否全屏、监听浏览器全屏事件、定义全屏时的css样式(全屏伪类)
7 0
|
2月前
|
JavaScript 前端开发 UED
JS:如何获取浏览器窗口尺寸?
JS:如何获取浏览器窗口尺寸?
146 1
|
2月前
|
JavaScript
浏览器插件crx文件--JS混淆与解密
浏览器插件crx文件--JS混淆与解密
66 0
|
2月前
|
JavaScript 前端开发 算法
Node.js中的process.nextTick与浏览器环境中的nextTick有何不同?
Node.js中的process.nextTick与浏览器环境中的nextTick有何不同?
|
2月前
|
JavaScript 前端开发 小程序
js 实现浏览器下载视频2种方法
js 实现浏览器下载视频2种方法
594 0
|
2月前
|
Web App开发 JavaScript
Vue 项目中使用 debugger 在 chrome 谷歌浏览器中失效以及 console.log 指向去了 vue.js 代码
Vue 项目中使用 debugger 在 chrome 谷歌浏览器中失效以及 console.log 指向去了 vue.js 代码
464 0
|
2月前
|
Web App开发 JavaScript 前端开发
浏览器与Node.js事件循环:异同点及工作原理
浏览器与Node.js事件循环:异同点及工作原理
|
17天前
|
Web App开发 JavaScript 前端开发
使用 JS 实现在浏览器控制台打印图片 console.image()
在前端开发过程中,调试的时候,我们会使用 console.log 等方式查看数据。但对于图片来说,仅靠展示的数据与结构,是无法想象出图片最终呈现的样子的。 虽然我们可以把图片数据通过 img 标签展示到页面上,或将图片下载下来进行预览。但这样的调试过程实在是复杂,何不实现一个 console.image() 呢?
23 1
使用 JS 实现在浏览器控制台打印图片 console.image()
|
11天前
|
JavaScript
JS获取浏览器地址栏的多个参数值的任意值
JS获取浏览器地址栏的多个参数值的任意值
19 3