uniapp小程序点击图片弹出输入框进行文字批注,输入完成后留下标记,再次点击标记可对输入的文字进行编辑
时间: 2023-11-22 15:56:59 浏览: 221
uni-app 利用canvas进行画框,移动框,放大缩小并删除,目前支持小程序,h5,其他没测试过
实现这个功能可以采用以下步骤:
1. 在页面中添加一个图片组件,并为其绑定点击事件。
2. 点击事件触发后,弹出一个输入框组件,让用户输入文字批注。
3. 用户输入完成后,将输入的内容保存到一个数组中,并在图片上添加一个标记,标记可以是一个图标或者一个文字标签。
4. 再次点击标记时,弹出一个编辑框组件,让用户对输入的文字进行编辑。
5. 用户编辑完成后,更新保存在数组中的文本内容,并更新标记展示的内容。
具体实现可以参考以下代码:
```html
<template>
<view>
<image src="图片地址" @click="showInput"></image>
<view v-for="(note, index) in notes" :key="index">
<text class="note" :style="{left: note.left + 'px', top: note.top + 'px'}" @click="editNote(index)">{{ note.text }}</text>
</view>
<input v-show="show" v-model="inputValue" @confirm="addNote" placeholder="请输入文字批注"></input>
<input v-show="showEdit" v-model="editValue" @confirm="updateNote" placeholder="请输入编辑后的内容"></input>
</view>
</template>
<script>
export default {
data() {
return {
show: false, // 是否显示输入框
showEdit: false, // 是否显示编辑框
notes: [], // 存储批注信息的数组
inputValue: '', // 输入框中的值
editValue: '', // 编辑框中的值
editIndex: -1 // 当前编辑的批注在数组中的下标
}
},
methods: {
// 点击图片,打开输入框
showInput() {
this.show = true
},
// 点击输入框确定按钮,添加批注
addNote() {
const left = 100 // 标记左上角距离图片左上角的横坐标
const top = 100 // 标记左上角距离图片左上角的纵坐标
const note = {
text: this.inputValue,
left,
top
}
this.notes.push(note)
this.show = false
this.inputValue = ''
},
// 点击批注,打开编辑框
editNote(index) {
this.editIndex = index
this.editValue = this.notes[index].text
this.showEdit = true
},
// 点击编辑框确定按钮,更新批注
updateNote() {
this.notes[this.editIndex].text = this.editValue
this.showEdit = false
this.editValue = ''
this.editIndex = -1
}
}
}
</script>
<style>
.note {
position: absolute;
}
</style>
```
需要注意的是,标记的位置需要根据用户点击的位置进行计算,可以使用 `event.touches[0].pageX` 和 `event.touches[0].pageY` 获取用户点击的坐标,然后计算标记的位置。
阅读全文