vue 鼠标点击图片做红点标记

实现内容

需要实现点击图片标记红点,主要实现了两种方式:

  1. 只要鼠标点击,就进行标记,可标记多个点,再次点击已标记的点,就取消勾选

  1. 鼠标多次点击界面只存在一个点

一、只要鼠标点击,就进行标记,可标记多个点,再次点击已标记的点,就取消标记

实现效果
实现代码
<template>
  <div class="app-container">

    <el-form size="medium">
      <div id="block">
        <!-- 变量赋值 :src="imageUrl"  -->
        <!-- 直接读取文件路径 :src="require('@/assets/images/profile.jpg')" -->
        <el-image id="imageRef" fit="contain" :src="require('@/assets/images/小狗.jpg')" style="width:640px;height:768px;"
          @click="clickMarkPoint($event)"></el-image>
      </div>
      <el-tag type="info">点击鼠标左键,进行标注</el-tag>
      <el-form-item label="X轴坐标:">
        {{ markData.xAxis }}
      </el-form-item>
      <el-form-item label="Y轴坐标:">
        {{ markData.yAxis }}
      </el-form-item>
    </el-form>

  </div>
</template>
  
<script>

export default {
  name: "markPointPage",
  data() {
    return {
      // 标记图坐标显示
      markData: {
        xAxis: 0,
        yAxis: 0,
        rowIndex: 0,
        imageUrl: ''
      },
      // 红点数
      index: 0
    }

  },

  methods: {
    clickMarkPoint(e) {
      // e.offsetX 相对于图片的X坐标  
      //  e.offsetY 相对于图片的Y坐标
      this.markPoint(e.offsetX, e.offsetY);
      this.markData.xAxis = e.offsetX;
      this.markData.yAxis = e.offsetY;
    },
    markPoint(offsetX, offsetY) {
      var nameIndex=this.index++;
      // 点击多个点,生成多个值
      var div = document.createElement("div"+nameIndex);
      div.className = "marker";
      div.id = "marker"+nameIndex;
      // 红点的宽
      div.style.width = "45px";
      // 红点的高
      div.style.height = "45px";
      // 红点颜色
      div.style.backgroundColor = "red";
      div.style.left = offsetX + "px";
      div.style.top = offsetY + "px";
      div.style.position = "absolute";
      // 边框半径百分比
      div.style.borderRadius = "50%";
      div.innerHTML = "<span><font color='yellow'>谢主隆恩</font></span>";
      document.getElementById("block").appendChild(div);

      // 添加点击事件,再次点击标记点,则移除红点
      document.getElementById("marker"+nameIndex).addEventListener("click", function(){
        // 移除点
        console.log(nameIndex)
        var markPointAxis = document.getElementById("marker"+nameIndex);
        markPointAxis.remove(markPointAxis);
      });
    }
  }

}

</script>

二、鼠标多次点击界面只存在一个点

实现效果
实现代码
<template>
  <div class="app-container">

    <el-form size="medium">
      <div id="block">
        <!-- 变量赋值 :src="imageUrl"  -->
        <!-- 直接读取文件路径 :src="require('@/assets/images/profile.jpg')" -->
        <el-image id="imageRef" fit="contain" :src="require('@/assets/images/小狗.jpg')" style="width:640px;height:768px;"
          @click="clickMarkPoint($event)"></el-image>
      </div>
      <el-tag type="info">点击鼠标左键,进行标注</el-tag>
      <el-form-item label="X轴坐标:">
        {{ markData.xAxis }}
      </el-form-item>
      <el-form-item label="Y轴坐标:">
        {{ markData.yAxis }}
      </el-form-item>
    </el-form>

  </div>
</template>
  
<script>

export default {
  name: "markPointPage",
  data() {
    return {
      // 标记图坐标显示
      markData: {
        xAxis: 0,
        yAxis: 0,
        rowIndex: 0,
        imageUrl: ''
      },
      // 红点数
      index: 0
    }

  },

  methods: {
    clickMarkPoint(e) {
      // e.offsetX 相对于图片的X坐标  
      //  e.offsetY 相对于图片的Y坐标
      this.markPoint(e.offsetX, e.offsetY);
      this.markData.xAxis = e.offsetX;
      this.markData.yAxis = e.offsetY;
    },
    markPoint(offsetX, offsetY) {
      // 页面只有一个点,再次移除marker
      if (document.getElementsByClassName("marker").length > 0) {
        // 移除点
        var markPointAxis = document.getElementById("marker");
        markPointAxis.remove(markPointAxis);
      }
      var div = document.createElement("div");
      div.className = "marker";
      div.id = "marker";
      // 红点的宽
      div.style.width = "45px";
      // 红点的高
      div.style.height = "45px";
      // 红点颜色
      div.style.backgroundColor = "red";
      div.style.left = offsetX + "px";
      div.style.top = offsetY + "px";
      div.style.position = "absolute";
      // 边框半径百分比
      div.style.borderRadius = "50%";
      div.innerHTML = "<span><font color='yellow'>谢主隆恩</font></span>";
      document.getElementById("block").appendChild(div);
    }
  }

}

</script>

如果对您有帮助,点个赞,O(∩_∩)O哈哈~

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue中实现图片的缩放和拖拽功能可以通过以下几个方法来实现: 1. 获取图片的实际宽高:可以使用getImgSize方法来获取图片的实际宽高,该方法返回一个Promise对象,通过Image对象的onload事件来获取图片的宽高\[2\]。 2. 初始化图片:在initImage方法中,根据盒子的大小和图片的大小来计算要显示的图片的大小。根据图片的宽高比例,确定图片的宽度和高度,并根据盒子的大小进行调整\[2\]。 3. 监听鼠标按下事件:在onmousedownHandle方法中,通过监听鼠标的移动事件来实现图片的拖拽功能。通过计算鼠标移动的距离,更新图片的位置\[3\]。 4. 旋转图片:通过handleRotate方法来实现图片的旋转功能。每次点击旋转按钮时,将图片的旋转角度增加90度,并更新图片的样式\[3\]。 5. 监听鼠标滚动事件:通过监听鼠标的滚动事件来实现图片的缩放功能。根据滚动的方向和速度,更新图片的大小\[2\]。 以上是实现Vue图片缩放和拖拽的一些方法,你可以根据需要进行调整和扩展。 #### 引用[.reference_title] - *1* *2* *3* [Vue2 实现图片的拖拽、缩放、旋转](https://blog.csdn.net/Android_boom/article/details/128713466)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值