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>
目录
相关文章
|
1月前
|
JavaScript API
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
93 0
|
2月前
获取元素到浏览器顶部的距离
文章介绍了两种方法来获取页面元素到浏览器顶部的距离:使用元素的`getBoundingClientRect().top`属性和自定义函数`getElementTop`结合`offsetParent`和`offsetTop`属性。
111 1
|
3月前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
107 1
|
3月前
|
Web App开发
成功解决Chrome浏览器 控制台下看不到接口信息的问题
这篇文章提供了解决Chrome浏览器控制台不显示接口信息问题的方法,包括检查过滤设置和确保“保留日志”开关已打开。
成功解决Chrome浏览器 控制台下看不到接口信息的问题
|
3月前
|
存储 PHP Windows
Typecho——非插件方式实现评论显示系统信息和浏览器信息
Typecho——非插件方式实现评论显示系统信息和浏览器信息
38 0
|
3月前
|
JavaScript API
VUE——监听浏览器关闭及标签页关闭事件
VUE——监听浏览器关闭及标签页关闭事件
375 0
|
4月前
|
JavaScript 前端开发 开发者
浏览器事件机制详解
浏览器事件机制详解
44 1
|
14天前
|
JSON 移动开发 JavaScript
在浏览器执行js脚本的两种方式
【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
在浏览器执行js脚本的两种方式
|
12天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
429 1