最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue如何使用js對圖片進行點擊標注圓點并記錄它的坐標

 更新時間:2022年04月28日 11:20:53   作者:清新小伙子  
這篇文章主要介紹了vue如何使用js對圖片進行點擊標注圓點并記錄它的坐標,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

最近和深度學(xué)習方面搞個東西,需要前端對圖片進行標注,呃,這個我上網(wǎng)也沒找到什么好方法,只能自己通過js來實現(xiàn),不過現(xiàn)在剛初步做出一點效果,樣式?jīng)]留意,挺丑的,嘻嘻。

功能

  • 點擊開始標注按鈕后才可以對圖片進行標注
  • 在圖片區(qū)域內(nèi)單機左鍵才可進行加點
  • 在標注點上右擊刪除該點,在圖片上右擊無效果
  • 完成標注后點擊完成標注按鈕后,結(jié)束標注,此后點擊圖片不再加點

標注前

標注后

打印記錄坐標點

這個坐標看你自己需求,是相對圖片的百分比坐標,還是相對整個窗口的坐標,js都可以實現(xiàn)的

代碼實現(xiàn)

我先說一說關(guān)鍵功能實現(xiàn)的js代碼(里面涉及了date的數(shù)據(jù),所以需要看下后面的全部代碼實現(xiàn)),后面就是全部代碼

判斷鼠標是否右擊

if(e.button !== 2)       //判斷鼠標是否右擊

阻止冒泡行為和默認右鍵菜單事件

document.getElementById('myBiaoZhu').oncontextmenu=((e)=>{
        if(e && e.preventDefault) {
          //阻止默認瀏覽器動作(W3C)
          e.preventDefault()
        } else {
          //IE中阻止函數(shù)器默認動作的方式
          window.event.returnValue = false
        }
        return false
      })      //阻止冒泡行為和默認右鍵菜單事件

給圖片加點擊事件

document.getElementById('myBiaoZhu').onmousedown=(e)=>{
        e = e || window.event
        if(e.button !== 2){       //判斷是否右擊
          if(this.canBiaoZhu){    //判斷是否可以進行標注
            var x = e.offsetX || e.layerX
            var y = e.offsetY || e.layerY
            console.log(x,y)
            var myImg = document.querySelector("#myBiaoZhu")
            var currWidth = myImg.clientWidth
            var currHeight = myImg.clientHeight
            var ProportionWidthInImg = x/currWidth
            var ProportionHeightInImg = y/currHeight
            // console.log("圖片比例高度:"+ProportionHeightInImg)
            // console.log("圖片比例寬度:"+ProportionWidthInImg)
            this.banMa.push({
              id:this.banMa.length+1,
              x,
              y
            })
            this.createMarker(x,y)
          }
        }
      }

畫點

  createMarker(x, y) {
    var div = document.createElement('div')
    div.className = 'marker'
    div.id = 'marker'+this.banMa.length
    y = y + document.getElementById('myBiaoZhu').offsetTop - this.pointSize/2
    x = x + document.getElementById('myBiaoZhu').offsetLeft - this.pointSize/2
    div.style.width = this.pointSize + 'px'
    div.style.height = this.pointSize + 'px'
    div.style.backgroundColor = this.pointColor
    div.style.left = x + 'px'
    div.style.top = y + 'px'
    div.oncontextmenu=((e)=>{  //阻止冒泡行為和默認右鍵菜單事件,同時刪除該點
      var id = e.target.id
      document.getElementById('myBiaoZhuDiv').removeChild(div)
      this.banMa = this.banMa.filter(item=>item.id!= id.slice(6,id.length))
      if(e && e.preventDefault) {
        //阻止默認瀏覽器動作(W3C)
        e.preventDefault()
      } else {
        //IE中阻止函數(shù)器默認動作的方式
        window.event.returnValue = false
      }
      return false
    })  
    document.getElementById('myBiaoZhuDiv').appendChild(div)
  },

html:

<template>
  <div class="myBiaoZhu" id="myBiaoZhuDiv">
    <img id="myBiaoZhu" src="./1.png" alt="" style="height: 400px;width: 400px;">
    <el-button type="text" @click="startBiaoZhu">開始標注</el-button>
    <el-button type="text" @click="endBiaoZhu">標注完成</el-button>
  </div>
</template>

css:

<style lang="less">
  #myBiaoZhuDiv{
    position:relative;
    img{
      border:solid 1px #000;
      display:inline-block;
      margin:100px 100px;
      z-index: 1;
    }
    .marker{
      position:absolute;
      border-radius: 50%;
      z-index: 999;
    }
  }
</style>

js:

<script>
  export default {
    name: '',
    components: {},
    data () {
      return {
        banMa:[],           //斑馬線的數(shù)組
        canBiaoZhu:false,  //是否可以進行標注
        pointColor:'red',   //點的顏色
        pointSize:10,       //點的大小
      }
    },
    methods: {
      //開始標注
      startBiaoZhu(){
        this.canBiaoZhu = true
      },
      //完成標注
      endBiaoZhu(){
        this.canBiaoZhu = false
      },
      //畫點
      createMarker(x, y) {
        var div = document.createElement('div')
        div.className = 'marker'
        div.id = 'marker'+this.banMa.length
        y = y + document.getElementById('myBiaoZhu').offsetTop - this.pointSize/2
        x = x + document.getElementById('myBiaoZhu').offsetLeft - this.pointSize/2
        div.style.width = this.pointSize + 'px'
        div.style.height = this.pointSize + 'px'
        div.style.backgroundColor = this.pointColor
        div.style.left = x + 'px'
        div.style.top = y + 'px'
        div.oncontextmenu=((e)=>{
          var id = e.target.id
          document.getElementById('myBiaoZhuDiv').removeChild(div)
          this.banMa = this.banMa.filter(item=>item.id!= id.slice(6,id.length))
          if(e && e.preventDefault) {
            //阻止默認瀏覽器動作(W3C)
            e.preventDefault()
          } else {
            //IE中阻止函數(shù)器默認動作的方式
            window.event.returnValue = false
          }
          return false
        })  //阻止冒泡行為和默認右鍵菜單事件,刪除該點
        document.getElementById('myBiaoZhuDiv').appendChild(div)
      },
    },
    watch: {},
    computed: {},
    created () {
    },
    mounted () {
      document.getElementById('myBiaoZhu').oncontextmenu=((e)=>{
        if(e && e.preventDefault) {
          //阻止默認瀏覽器動作(W3C)
          e.preventDefault()
        } else {
          //IE中阻止函數(shù)器默認動作的方式
          window.event.returnValue = false
        }
        return false
      })      //阻止冒泡行為和默認右鍵菜單事件
      document.getElementById('myBiaoZhu').onmousedown=(e)=>{
        e = e || window.event
        if(e.button !== 2){       //判斷是否右擊
          if(this.canBiaoZhu){    //判斷是否可以進行標注
            var x = e.offsetX || e.layerX
            var y = e.offsetY || e.layerY
            console.log(x,y)
            var myImg = document.querySelector("#myBiaoZhu")
            var currWidth = myImg.clientWidth
            var currHeight = myImg.clientHeight
            var ProportionWidthInImg = x/currWidth
            var ProportionHeightInImg = y/currHeight
            // console.log("圖片比例高度:"+ProportionHeightInImg)
            // console.log("圖片比例寬度:"+ProportionWidthInImg)
            this.banMa.push({
              id:this.banMa.length+1,
              x,
              y
            })
            this.createMarker(x,y)
          }
        }
      }
    },
    beforeDestroy () {
    },
    destroyed () {
    },
  }
</script>

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • Vue.set 全局操作簡單示例

    Vue.set 全局操作簡單示例

    這篇文章主要介紹了Vue.set 全局操作,結(jié)合簡單實例形式分析了Vue.set 全局操作相關(guān)使用技巧與注意事項,需要的朋友可以參考下
    2019-09-09
  • 解決Vue 給mapState中定義的屬性賦值報錯的問題

    解決Vue 給mapState中定義的屬性賦值報錯的問題

    這篇文章主要介紹了解決Vue 給mapState中定義的屬性賦值報錯的問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • vue3實現(xiàn)無縫滾動組件的示例代碼

    vue3實現(xiàn)無縫滾動組件的示例代碼

    在日常開發(fā)中,經(jīng)常遇到需要支持列表循環(huán)滾動展示,特別是在數(shù)據(jù)化大屏開發(fā)中,所以小編今天為大家介紹一下如何利用vue3實現(xiàn)一個無縫滾動組件吧
    2023-09-09
  • vue+iview分頁組件的封裝

    vue+iview分頁組件的封裝

    這篇文章主要為大家詳細介紹了vue+iview分頁組件的封裝,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Vue中el-tree樹全部展開或收起的實現(xiàn)示例

    Vue中el-tree樹全部展開或收起的實現(xiàn)示例

    本文主要介紹了Vue中el-tree樹全部展開或收起的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-07-07
  • Vue頂部tags瀏覽歷史的實現(xiàn)

    Vue頂部tags瀏覽歷史的實現(xiàn)

    在管理系統(tǒng)中,常常需要在頂部tags顯示瀏覽歷史。本文將教大家如何通過Vue實現(xiàn)這一功能,文中的示例代碼講解詳細,需要的可以參考一下
    2021-12-12
  • vue項目中?jsconfig.json概念及使用步驟

    vue項目中?jsconfig.json概念及使用步驟

    這篇文章主要介紹了vue項目中?jsconfig.json是什么,本文僅僅簡單介紹了?jsconfig?.json?的一些基本配置,而?jsconfig?.json提供了大量能使我們快速便捷提高代碼效率的方法,需要的朋友可以參考下
    2022-07-07
  • vue-element-admin登錄全流程分享

    vue-element-admin登錄全流程分享

    這篇文章主要介紹了vue-element-admin登錄全流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue3實現(xiàn)ai聊天對話框功能

    vue3實現(xiàn)ai聊天對話框功能

    這篇文章主要介紹了vue3實現(xiàn)ai聊天對話框功能,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-12-12
  • vue+ElementUI實現(xiàn)訂單頁動態(tài)添加產(chǎn)品數(shù)據(jù)效果實例代碼

    vue+ElementUI實現(xiàn)訂單頁動態(tài)添加產(chǎn)品數(shù)據(jù)效果實例代碼

    本篇文章主要介紹了vue+ElementUI實現(xiàn)訂單頁動態(tài)添加產(chǎn)品效果實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論

广汉市| 阿坝| 乌鲁木齐县| 贵州省| 云霄县| 屏东县| 电白县| 昌都县| 德州市| 定结县| 古丈县| 仁化县| 延吉市| 尉犁县| 文昌市| 成武县| 临潭县| 新化县| 揭东县| 绥化市| 黑水县| 绥中县| 孝昌县| 昌平区| 义乌市| 始兴县| 隆回县| 若尔盖县| 松阳县| 诏安县| 东阿县| 高密市| 象州县| 无棣县| 右玉县| 汽车| 沙坪坝区| 宁南县| 万安县| 兴义市| 安溪县|