• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共299篇

    前端 - Javascript

关闭

返回栏目

关闭

返回前端 - Javascript栏目

118 - 鼠标事件 - mousemove - 鼠标移动事件的应用

作者:

贺及楼

成为作者

更新日期:2025-02-21 19:55:48

鼠标事件 - mousemove - 鼠标移动事件的应用

在前端开发中,鼠标事件是与用户交互的重要组成部分。其中,mousemove 事件是一个非常实用的鼠标事件,它会在鼠标指针在元素内部移动时触发。本文将深入探讨 mousemove 事件的基本概念、应用场景以及实用例子。

基本概念

mousemove 事件是 JavaScript 中鼠标事件的一种,当鼠标指针在某个元素上移动时,该元素就会触发 mousemove 事件。可以通过 addEventListener 方法为元素绑定 mousemove 事件处理函数。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. </head>
  6. <body>
  7. <div id="box" style="width: 200px; height: 200px; background-color: lightblue;"></div>
  8. <script>
  9. const box = document.getElementById('box');
  10. box.addEventListener('mousemove', function (event) {
  11. console.log(`鼠标当前位置:x = ${event.clientX}, y = ${event.clientY}`);
  12. });
  13. </script>
  14. </body>
  15. </html>

在上述代码中,当鼠标在蓝色方块内移动时,控制台会不断输出鼠标的当前位置。

应用场景

1. 鼠标跟随效果

鼠标跟随效果是 mousemove 事件最常见的应用之一。通过监听鼠标的移动,动态改变元素的位置,使其跟随鼠标移动。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <style>
  6. #follow {
  7. position: absolute;
  8. width: 20px;
  9. height: 20px;
  10. background-color: red;
  11. border-radius: 50%;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <div id="follow"></div>
  17. <script>
  18. const follow = document.getElementById('follow');
  19. document.addEventListener('mousemove', function (event) {
  20. follow.style.left = event.clientX + 'px';
  21. follow.style.top = event.clientY + 'px';
  22. });
  23. </script>
  24. </body>
  25. </html>

在这个例子中,一个红色的圆形元素会跟随鼠标在页面上移动。

2. 图片缩放预览

通过 mousemove 事件可以实现图片的缩放预览效果。当鼠标在图片上移动时,显示图片的放大区域。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <style>
  6. #image-container {
  7. position: relative;
  8. width: 300px;
  9. height: 200px;
  10. overflow: hidden;
  11. }
  12. #image {
  13. width: 100%;
  14. height: 100%;
  15. }
  16. #preview {
  17. position: absolute;
  18. top: 0;
  19. left: 320px;
  20. width: 200px;
  21. height: 200px;
  22. border: 1px solid black;
  23. overflow: hidden;
  24. }
  25. #preview img {
  26. width: 600px;
  27. height: 400px;
  28. }
  29. </style>
  30. </head>
  31. <body>
  32. <div id="image-container">
  33. <img id="image" src="example.jpg" alt="Example Image">
  34. </div>
  35. <div id="preview">
  36. <img id="preview-image" src="example.jpg" alt="Example Image">
  37. </div>
  38. <script>
  39. const imageContainer = document.getElementById('image-container');
  40. const previewImage = document.getElementById('preview-image');
  41. imageContainer.addEventListener('mousemove', function (event) {
  42. const rect = imageContainer.getBoundingClientRect();
  43. const x = event.clientX - rect.left;
  44. const y = event.clientY - rect.top;
  45. const scaleX = x / rect.width;
  46. const scaleY = y / rect.height;
  47. const previewX = -scaleX * (previewImage.width - 200);
  48. const previewY = -scaleY * (previewImage.height - 200);
  49. previewImage.style.transform = `translate(${previewX}px, ${previewY}px)`;
  50. });
  51. </script>
  52. </body>
  53. </html>

当鼠标在图片上移动时,右侧的预览框会显示图片的放大区域。

3. 绘制画布

mousemove 事件还可以用于在画布上绘制图形。通过监听鼠标的移动,在画布上不断绘制线条。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <style>
  6. canvas {
  7. border: 1px solid black;
  8. }
  9. </style>
  10. </head>
  11. <body>
  12. <canvas id="canvas" width="400" height="300"></canvas>
  13. <script>
  14. const canvas = document.getElementById('canvas');
  15. const ctx = canvas.getContext('2d');
  16. let isDrawing = false;
  17. let lastX = 0;
  18. let lastY = 0;
  19. canvas.addEventListener('mousedown', function (event) {
  20. isDrawing = true;
  21. [lastX, lastY] = [event.offsetX, event.offsetY];
  22. });
  23. canvas.addEventListener('mousemove', function (event) {
  24. if (isDrawing) {
  25. ctx.beginPath();
  26. ctx.moveTo(lastX, lastY);
  27. ctx.lineTo(event.offsetX, event.offsetY);
  28. ctx.stroke();
  29. [lastX, lastY] = [event.offsetX, event.offsetY];
  30. }
  31. });
  32. canvas.addEventListener('mouseup', function () {
  33. isDrawing = false;
  34. });
  35. canvas.addEventListener('mouseout', function () {
  36. isDrawing = false;
  37. });
  38. </script>
  39. </body>
  40. </html>

在这个例子中,用户可以在画布上按下鼠标并移动来绘制线条。

总结

应用场景 实现思路
鼠标跟随效果 监听 mousemove 事件,动态改变元素的位置
图片缩放预览 监听 mousemove 事件,根据鼠标位置计算缩放区域并显示
绘制画布 监听 mousedownmousemovemouseupmouseout 事件,在鼠标按下并移动时绘制线条

mousemove 事件在前端开发中有着广泛的应用,可以为用户带来更加丰富的交互体验。通过合理利用 mousemove 事件,可以实现各种有趣的效果。