- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) > JavaScript >
- element-ui 上傳圖片后標注坐標點(diǎn)
element-ui是由餓了么前端團隊推出的一套為開(kāi)發(fā)者、設計師和產(chǎn)品經(jīng)理準備的基于Vue.js 2.0的桌面組件庫,而手機端有對應框架是 Mint UI 。整個(gè)ui風(fēng)格簡(jiǎn)約,很實(shí)用,同時(shí)也極大的提高了開(kāi)發(fā)者的效率,是一個(gè)非常受歡迎的組件庫。
頁(yè)面大概如下:
組件使用的是layui的layer.open彈框。
左邊是表單信息,右邊是繪圖區域。
原文件mapForm.vue
<template> <div class="mapForm"> <div class="left"> <el-form ref="form" :model="form" :rules="rules" label-width="160px"> <el-form-item label="地圖名稱(chēng)" prop="mapName"> <el-input v-model="form.mapName" size="mini" clearable class="formInputClass"></el-input> </el-form-item> <el-form-item label="地圖描述" prop="remarks"> <el-input type="textarea" v-model="form.remarks" size="mini" clearable class="formInputClass"></el-input> </el-form-item> <el-form-item label="點(diǎn)位信息" prop="" v-if="mapList.length > 0"> <div class="mapContent"> <div v-for="(map,key) in mapList" :key="key"> <div class="pointAbscissaOrdinate"><span>點(diǎn)位坐標{{key+1}}:{{map.abscissa}}-{{map.ordinate}}</span></div> <el-select v-model="mapList[key]['point']" placeholder="請選擇" class="selectClass" @change="changePoint"> <el-option v-for="(item, key) in pointList" :key="key" :label="item.name" :value="item.point"> </el-option> </el-select> </div> </div> </el-form-item> <div class="btn"> <el-button @click="checkParams" type="primary">提交</el-button> </div> </el-form> </div> <div class="right" id=""> <div class="imgDiv" id="imgDiv" v-loading="loadStage"> <img :src="fileSrc" width="1100" height="720" id="imgPainter" /> <div class="marker" v-for="(item, key) in mapList" :key="key" :style="{top: item.ordinate+'px', 'left': item.abscissa+'px'}" @contextmenu.prevent="clearMarker(key)"> {{key+1}} <div class="ponint">{{item.point}}</div> </div> </div> <div class="uploadBtn"> <el-upload class="upload-demo" ref="upload" action="" :on-change="handleChange" :show-file-list="false" :on-remove="handleRemove" :auto-upload="false" style="display:inline-block;"> <el-button slot="trigger" size="mini" type="primary">選取文件</el-button> </el-upload> <el-button @click="clearPic" type="danger">清除所有點(diǎn)位</el-button> </div> <div class="info"><i class="el-icon-info"></i>顯示大小為1100px*720px</div> <div class="info"><i class="el-icon-info"></i>圖片框內鼠標左鍵標點(diǎn)</div> <div class="info"><i class="el-icon-info"></i>圖片框內鼠標右鍵已經(jīng)標注的點(diǎn)刪除該點(diǎn)</div> </div> </div> </template> <script> export default { name: 'mapFormComponent', data() { return { form: { mapName: "", }, rules: { mapName: [ { required: true, message: "請輸入地圖名稱(chēng)", trigger: "blur" }, ], }, fileList: [], fileSrc: '', pointList: [ { name: "排放口1", point: "@FQ01" }, { name: "排放口2", point: "@FQ02" }, ], mapList: [], //斑馬線(xiàn)的數組 canBiaoZhu: true, //是否可以進(jìn)行標注 pointColor: 'red', //點(diǎn)的顏色 pointSize: 20, //點(diǎn)的大小 pointSelectList: {}, notifyId: {}, loadStage: false, }; }, created() { }, mounted() { // 繪點(diǎn)區域事件綁定 let _this = this; if (document.getElementById('imgPainter')) { document.getElementById('imgPainter').onmousedown = (e) => { e = e || window.event if (e.button !== 2) { //判斷是否右擊 if (this.canBiaoZhu && this.fileSrc != '') { //判斷是否可以進(jìn)行標注 需上傳圖片 var x = e.offsetX || e.layerX var y = e.offsetY || e.layerY this.mapList.push({ id: this.mapList.length + 1, name: '', abscissa: x, ordinate: y, }) // 設置變量 // this.pointSelectList.$set(0); let key = `point`; _this.$set(this.mapList[this.mapList.length - 1], key, "") } else { //提示上傳圖片 // 只顯示一次 if (_this.notifyId.id) _this.notifyId.close(); this.notifyId = _this.$notify.error({ title: '提示信息', message: '請先上傳圖片后再標點(diǎn)', showClose: true, }); } } else { return false } } } // 右鍵阻止 var oDiv1 = document.getElementById('imgDiv'); oDiv1.oncontextmenu = function (ev) { var e = e || window.event; //阻止冒泡 e.cancelBubble = true; //阻止觸發(fā)默認事件 e.returnValue = false; } }, methods: { changePoint() { /**point change */ this.$forceUpdate(); }, clearMarker(index) { /**清除marker */ this.mapList.splice(index, 1); }, handleChange(file, fileList) { this.loadStage = true; let fileName = file.name; let regex = /(.jpg|.jpeg|.gif|.png|.bmp)$/; if (regex.test(fileName.toLowerCase())) { this.fileSrc = URL.createObjectURL(file.raw) // 獲取URL console.log(this.fileSrc); } else { this.$message.error('請選擇圖片文件'); } this.loadStage = false; }, clearPic() { /**清除圖片 */ this.mapList = []; }, checkParams() { /*** * 驗證提交信息 */ this.$refs["form"].validate((valid) => { if (valid) { let params = this.form; this.submit(params); } }); }, async submit(params) { /**提交 */ let resp = await this.$api.companyApiList .addEditCompany(params); if (resp.data.code != "error") { // 判斷是否新增修改 this.$notify.success({ title: "提示", message: resp.data.msg, showClose: true, }); let type = params.id && params.id != '' ? 'edit' : 'add'; this.$emit("update", type); // 清空表單數據 this.$refs.form.resetFields(); } }, }, }; </script> <style scoped lang="less"> /** 表單樣式 */ .mapForm { display: flex; padding: 10px; border: 1px solid pink; .left { flex: 2; border-right: 1px dashed pink; margin-right: 4px; .mapContent { height: 700px; overflow-y: auto; .selectClass { margin: 0px 5px; } .pointAbscissaOrdinate { display: inline-block; width: 140px; } } } .right { flex: 8; // border: 1px solid pink; max-width: 1100px; .imgDiv { position: relative; height: 720px; border: 2px solid cornflowerblue; .marker { position: absolute; border-radius: 50%; z-index: 999; width: 20px; height: 20px; background-color: red; text-align: center; line-height: 20px; color: yellow; .ponint { display: block; position: absolute; left: 20px; top: 0px; font-size: 12px; color: blue; } } .marker:hover .ponint { display: block; } } .info { font-size: 12px; } .uploadBtn { margin: 10px 0px; } } .btn { padding-left: 160px; } } .formInputClass { width: 200px; } </style>
標點(diǎn)的效果如下:
到此這篇關(guān)于element-ui 上傳圖片后標注坐標點(diǎn)的文章就介紹到這了,更多相關(guān)element-ui 上傳圖片內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站