图片选框跟随鼠标移动

实现效果

鼠标移动到图标,选框跟随移动,如下图:

效果
在这里插入图片描述

效果查看(点击查看)

实现思路

  1. 使用css变量设置选框位置和样式

    .pointer {
      --l: 30px; /* 线框长度*/
      --t: 3px; /* 线框粗细 */
      --g: 16px; /* 线框与图片的间隙 */
      --w: 350px; /* 图片大小 */
      --h: 200px; /* 图片大小 */
      --x: -600px;
      --y: 24px; /* 线框左上角纵坐标 */
      display: none;
      position: absolute;
      width: calc(var(--w) + var(--g) * 2);
      height: calc(var(--h) + var(--g) * 2);
      border: var(--t) solid #fff;
      left: calc(var(--x) - var(--g));
      top: calc(var(--y) - var(--g));
    }
    
  2. 使用css 的 mask属性绘制选框边缘

    .pointer {
      mask: conic-gradient(
          at var(--l) var(--l),
          transparent 75%,
          blue 75% 100%
        )
        0 0 / calc(100% - var(--l)) calc(100% - var(--l)) repeat;
    }
    

完整代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>图片选框跟随鼠标移动</title>
    <style>
      * {
        box-sizing: border-box;
      }
      body {
        background-color: #000;
        padding: 50px;
        margin: 0;
      }
      .container {
        display: grid;
        grid-template-columns: repeat(3, 33.33%);
        position: relative;
      }
      .item {
        width: 100%;
        padding: 24px;
      }
      .item img {
        width: 100%;

        object-fit: cover;
        display: block;
        cursor: pointer;
      }
      .pointer {
        --l: 30px; /* 线框长度*/
        --t: 3px; /* 线框粗细 */
        --g: 16px; /* 线框与图片的间隙 */
        --w: 350px; /* 图片大小 */
        --h: 200px; /* 图片大小 */
        --x: -600px;
        --y: 24px; /* 线框左上角纵坐标 */
        display: none;
        position: absolute;
        width: calc(var(--w) + var(--g) * 2);
        height: calc(var(--h) + var(--g) * 2);
        border: var(--t) solid #fff;
        left: calc(var(--x) - var(--g));
        top: calc(var(--y) - var(--g));
        transition: 0.2s;
        mask: conic-gradient(
            at var(--l) var(--l),
            transparent 75%,
            blue 75% 100%
          )
          0 0 / calc(100% - var(--l)) calc(100% - var(--l)) repeat;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="item"><img src="./out/1 (1).jpg" alt="" /></div>
      <div class="item"><img src="./out/1 (2).jpg" alt="" /></div>
      <div class="item"><img src="./out/1 (3).jpg" alt="" /></div>
      <div class="item"><img src="./out/1 (4).jpg" alt="" /></div>
      <div class="item"><img src="./out/1 (5).jpg" alt="" /></div>
      <div class="item"><img src="./out/1 (6).jpg" alt="" /></div>
      <div class="pointer"></div>
    </div>
  </body>
  <script>
    const images = document.querySelectorAll(".container img");
    const pointer = document.querySelector(".pointer");
    for (const img of images) {
      img.onmouseenter = () => {
        pointer.style.display = "block";
        pointer.style.setProperty("--w", `${img.offsetWidth}px`);
        pointer.style.setProperty("--h", `${img.offsetHeight}px`);
        pointer.style.setProperty("--x", `${img.offsetLeft}px`);
        pointer.style.setProperty("--y", `${img.offsetTop}px`);
        console.log("pointer", pointer);
      };
    }
  </script>
</html>

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用OpenCV中的鼠标事件来实现实时选框显示,具体实现步骤如下: 1. 创建一个名为“image”的窗口,并在其中显示一张图片。 2. 定义一个鼠标回调函数,该函数将在鼠标事件发生时被调用。 3. 在鼠标回调函数中,根据鼠标事件的类型来进行相应的操作。例如,在鼠标按下时,记录下鼠标的起始坐标;在鼠标移动时,计算出选框的大小和位置,并在图像中绘制选框;在鼠标释放时,将选框的大小和位置保存下来。 4. 在主循环中,不断地显示图像,并检测是否有鼠标事件触发,如果有,则调用鼠标回调函数进行处理。 以下是示例代码: ```python import cv2 # 定义鼠标回调函数 def mouse_callback(event, x, y, flags, param): global x_start, y_start, x_end, y_end, drawing if event == cv2.EVENT_LBUTTONDOWN: drawing = True x_start, y_start = x, y elif event == cv2.EVENT_MOUSEMOVE: if drawing: x_end, y_end = x, y elif event == cv2.EVENT_LBUTTONUP: drawing = False x_end, y_end = x, y cv2.rectangle(img, (x_start, y_start), (x_end, y_end), (0, 255, 0), 2) # 创建窗口并显示图片 img = cv2.imread('test.jpg') cv2.namedWindow('image') cv2.imshow('image', img) # 注册鼠标回调函数 cv2.setMouseCallback('image', mouse_callback) # 主循环 drawing = False while True: cv2.imshow('image', img) if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.destroyAllWindows() ``` 在这个示例代码中,我们首先创建了一个名为“image”的窗口,并在其中显示了一张名为“test.jpg”的图片。然后我们定义了一个名为“mouse_callback”的鼠标回调函数,该函数将在鼠标事件发生时被调用。在函数中,我们根据鼠标事件的类型来进行相应的操作,包括记录起始坐标、计算选框大小和位置、绘制选框、保存选框大小和位置等。在主循环中,我们不断地显示图像,并检测是否有鼠标事件触发,如果有,则调用鼠标回调函数进行处理。最后,在按下“q”键后退出程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值