前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标节流处理、throttle、限制触发频率(setTimeout、clearInterval)

文章目录

使用lodashjs库

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>页面标题</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
    <!-- <link rel="stylesheet" href="styles.css"> -->
    <!-- <script src="script.js" defer></script> -->
    <style>
        .box {
            width: 200px;
            /* 设置盒子的宽度 */
            height: 200px;
            /* 设置盒子的高度 */
            background-color: lightblue;
            /* 设置盒子的背景颜色 */
            border: 1px solid #000;
            /* 可选: 添加边框 */
            display: flex;
            /* 使用 flexbox 布局 */
            justify-content: center;
            /* 水平居中内容 */
            align-items: center;
            /* 垂直居中内容 */
            font-size: 24px;
            /* 设置字体大小 */
        }
    </style>
</head>

<body>
    <div class="box"></div> <!-- 创建一个盒子元素 -->
    <script>
        const box = document.querySelector('.box');
        let i = 1;

        function mouseMove() {
            box.innerHTML = i++; // 显示当前计数器值
            console.log(i);
        }

        // 使用 lodash 的 throttle 函数进行节流
        box.addEventListener('mousemove', _.throttle(mouseMove, 3000)); // 每3000毫秒调用一次
    </script>
</body>

</html>

手动实现节流(通过判断之前设定的定时器setTimeout是否存在)

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>页面标题</title>
    <!-- <link rel="stylesheet" href="styles.css"> -->
    <!-- <script src="script.js" defer></script> -->
    <style>
        .box {
            width: 200px;
            /* 设置盒子的宽度 */
            height: 200px;
            /* 设置盒子的高度 */
            background-color: lightblue;
            /* 设置盒子的背景颜色 */
            border: 1px solid #000;
            /* 可选: 添加边框 */
            display: flex;
            /* 使用 flexbox 布局 */
            justify-content: center;
            /* 水平居中内容 */
            align-items: center;
            /* 垂直居中内容 */
            font-size: 24px;
            /* 设置字体大小 */
        }
    </style>
</head>

<body>
    <div class="box"></div> <!-- 创建一个盒子元素 -->
    <script>
        const box = document.querySelector('.box');
        let i = 1;

        function mouseMove() {
            box.innerHTML = i++; // 显示当前计数器值
            console.log(i);
        }

        function throttle(fn, delay) {
            let timer = null;
            return function () {
                console.log('判断定时器是否为空?', timer);
                if (!timer) {
                    console.log('定时器为空,延迟执行');
                    timer = setTimeout(() => {
                        fn(); // 在里面就是延迟执行,在外面就是立即执行
                        timer = null;
                    }, delay);
                }
                console.log('不执行');
            }
        }

        // 使用 lodash 的 throttle 函数进行节流
        box.addEventListener('mousemove', throttle(mouseMove, 3000)); // 每3000毫秒调用一次
    </script>
</body>

</html>
相关推荐
w_y_fan2 分钟前
Flutter 滚动组件总结
前端·flutter
wuli金居哇4 分钟前
我用 Turborepo 搭了个 Monorepo 脚手架,开发体验直接起飞!
前端
Asort6 分钟前
JavaScript 从零开始(五):运算符和表达式——从零开始掌握算术、比较与逻辑运算
前端·javascript
一枚前端小能手8 分钟前
🚀 缓存用错了网站更慢?前端缓存策略的5个致命误区
前端·javascript
艾小码9 分钟前
为什么你的页面会闪烁?useLayoutEffect和useEffect的区别藏在这里!
前端·javascript·react.js
艾小码10 分钟前
告别Vue混入的坑!Composition API让我效率翻倍的3个秘密
前端·javascript·vue.js
南雨北斗11 分钟前
VS Code 中手动和直接运行TS代码
前端
小高00713 分钟前
🔍说说对React的理解?有哪些特性?
前端·javascript·react.js
烛阴13 分钟前
【TS 设计模式完全指南】懒加载、缓存与权限控制:代理模式在 TypeScript 中的三大妙用
javascript·设计模式·typescript
Samsong13 分钟前
JavaScript逆向之反制无限debugger陷阱
前端·javascript