canvas/pages/index/indexclick.vue
2025-05-08 15:19:32 +08:00

125 lines
2.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<!-- 定义canvas画布 // 设置canvas大小为200x200像素 -->
<canvas @touchstart="handleCanvasTouch" canvas-id="canvas" id="canvas"
style="border: 1px solid red;height: 600px;width: 100vw;"></canvas>
<!-- 添加一个按钮用于触发绘图 -->
<button @click="handleDraw">点击绘制圆形</button>
</view>
</template>
<script setup>
import {
ref,
onMounted,
getCurrentInstance
} from 'vue'
const canvasWidth = ref(375) // 动态设置Canvas宽度
const canvasHeight = ref(400) // 动态设置Canvas高度
const instance = getCurrentInstance()
// 定义绘图函数
const blocks = ref([{
x: 50,
y: 50,
width: 100,
height: 100,
color: 'red',
message: '点击了红色方块'
},
{
x: 200,
y: 50,
width: 100,
height: 100,
color: 'blue',
message: '点击了蓝色方块'
},
{
x: 50,
y: 200,
width: 100,
height: 100,
color: 'green',
message: '点击了绿色方块'
},
{
x: 200,
y: 200,
width: 100,
height: 100,
color: 'yellow',
message: '点击了黄色方块'
},
{
x: 350,
y: 50,
width: 100,
height: 100,
color: 'purple',
message: '点击了紫色方块'
},
])
async function draw() {
const imgUrl = "https://assets.sx25.troyrc.com/sx25/images/events/XBDT.jpg"
const ctx = uni.createCanvasContext('canvas', instance) // 创建canvas绘图上下文
const res = await uni.getImageInfo({
src: imgUrl,
})
console.log(res, 'res');
ctx.drawImage(res.path, 0, 0, canvasWidth.value, canvasHeight.value);
// 定义5个方块的颜色和位置
// 绘制每个方块
blocks.value.forEach((block) => {
ctx.beginPath();
ctx.fillStyle = block.color;
ctx.rect(block.x, block.y, block.width, block.height);
ctx.fill();
});
ctx.draw()
}
// 处理canvas触摸事件
function handleCanvasTouch(event) {
// 获取触摸点的坐标
const x = event.touches[0].x;
const y = event.touches[0].y;
// 定义5个方块的颜色和位置
// 判断点击位置
blocks.value.forEach((block) => {
if (x >= block.x && x <= block.x + block.width && y >= block.y && y <= block.y + block.height) {
uni.showModal({
title: '提示',
content: block.message,
showCancel: true, // 显示取消按钮
success: (res) => {
if (res.confirm) {
console.log('用户点击了“确定”按钮');
} else if (res.cancel) {
console.log('用户点击了“取消”按钮');
}
},
});
}
});
}
// 按钮点击事件处理函数
const handleDraw = () => {
draw(); // 调用绘图函数
}
onMounted(() => {
draw()
// 确保在组件挂载后可以获取到Canvas元素
})
</script>
<style scoped>
button {
margin-top: 10px;
}
</style>