有坐标有图片但是图片缩放后就跑偏了
<template >
<view >
<view v-for="(item,index) in hot_list">
<image :data-index="index" :src="item.img" @load="hotBindload" @click="hotBindtap"></image>
</view>
</view>
</template>
<script>
import {
getHotArea
} from "@/utils/requ.js"
export default {
data() {
return {
hot_list: [{
id: 1,
img: "图片地址",
type: "usemap",
area: [{
shape: "rect",
coords: "100,85,220,190",
type: "path",
path: "/pages/xxxx"
},
{
shape: "rect",
coords: "470,95,645,220",
type: "path",
path: "/pages/xxxx"
},
{
shape: "rect",
coords: "58,380,240,510",
type: "path",
path: "/pages/xxxx"
},
{
shape: "rect",
coords: "485,396,645,515",
type: "path",
path: "/pages/xxxx"
},
],
ratio: 0
},
{
id: 3,
img: "图片地址",
type: "path",
path: "/pages/xxxx",
ratio: 0
}
]
};
},
onLoad(){},
methods: {
hotBindload(e) {
var _this = this;
console.log(e,"图片信息")
let windowWidth = uni.getSystemInfoSync().windowWidth;
let imgWidth = e.detail.width;
let ratio = windowWidth / imgWidth;
_this.hot_list[e.target.dataset.index].ratio = ratio
},
hotBindtap(e) {
var _this = this;
console.log(e,"点击后的数据")
let hot_area = _this.hot_list[e.target.dataset.index]
if (hot_area.type == "usemap") {
let area = getHotArea(e.detail, hot_area.area, hot_area.ratio)
if (area) {
console.log(area.path,"跳转地址")
uni.redirectTo({
url: area.path
})
}
} else if (hot_area.type == "path") {
console.log(hot_area)
uni.redirectTo({
url: hot_area.path
})
}
}
}
};
</script>
<style>
</style>
requ.js
function getHotArea(point, area, ratio){
console.log(point,"坐标参数")
console.log(area,"坐标数据")
console.log(ratio,"缩放比")
for (var i = 0; i < area.length; i++) {
var coords = area[i].coords.split(",");
var x1 = parseInt(coords[0] * ratio)
var y1 = parseInt(coords[1] * ratio)
var x2 = parseInt(coords[2] * ratio)
var y2 = parseInt(coords[3] * ratio)
if (point.x >= x1 && point.x <= x2 && point.y >= y1 && point.y <= y2) {
return area[i]
}
}
}
module.exports = {
getHotArea: getHotArea
}
应该是坐标转换问题
要解决图片缩放后热区位置跑偏的问题,你需要在图片加载后根据图片的实际宽度和显示容器的宽度计算出缩放比例,并应用这个比例来调整热区的坐标。你的代码中已经包含了这一逻辑,但需要注意的是,这个逻辑需要在图片完全加载后才能正确执行。
在你的代码中,你已经通过监听图片的 @load
事件来获取图片的宽度,并计算了缩放比例 ratio
。接下来,你需要确保在点击事件中使用这个 ratio
来调整热区的坐标。从你给出的 getHotArea
函数来看,这部分逻辑是正确的。
然而,这里还有一些潜在的改进点和需要注意的地方:
ratio
是直接存储在 hot_list
数组的每个元素中的。这是可行的,但请确保在图片尺寸变化(如设备旋转)时重新计算这些比例。getHotArea
函数中,coords
的解析和计算可以封装成更小的函数,以提高代码的可读性和可维护性。综上所述,你的代码在逻辑上是正确的,但可能需要根据实际情况进行一些调整和优化。如果你发现热区仍然跑偏,请检查是否有其他因素(如样式、布局、设备尺寸等)影响了热区的位置。
项目是用uniapp做的,只做支付宝小程序,现在需要给用户推送消息,这个是消息推送是完成由前端实现的吗???有没有相关的技术文档?
请问下uniapp打包成app怎么上传图片,可以用chooseImage上传图片吗,chooseImage是不是已经被淘汰了,新版的chooseMedia不支持
在公众号后台配置了隐私政策剪贴板,但还是复制报错“setClipboardData:fail api scope is not declared in the privacy agreement”
uniapp微信小程序怎么获取手机连接的wifi和mac地址 尝试了一些都无法获取到
图中的头像部分是通过后端请求来的图片, 现在我需要将整个卡片生成canvas图片,但是生成之后,其中的图片头像部分图片丢失了。 网上搜了很多,说是要把网路路径的图片转换为本地路径 这个具体要怎么转换呢?有没大佬遇到过类似的问题,救救孩子吧 \~^~/
小程序模板中怎么传递参数,在JS文件中因为有其他地方传递了type所以方法这边改不了,模板中不能直接传递参数吗?查了文档说可以用data-type,那方法那边接参应该怎么写呢?谢谢 小程序模板中怎么传递参数?