编写逻辑是:鼠标离开后,移动范围小于20px,则isopen不变,x位置回到原位置。结果实际运行的时候移动范围小于20时,鼠标离开后x直接停了。
let lasttouchX=0;
Page({
_handlerstart:function(evt)
lasttouchX=evt.changedTouches[0].pageX
},
_handlerend:function(evt){
let newtouchX=evt.changedTouches[0].pageX;
let cha=newtouchX-lasttouchX
console.log(cha)
if(cha<-20){
this.setData({
isopen: true,
})
}else if(cha>=20){
this.setData({
isopen: false,
})
}else{
this.setData({
isopen:this.data.isopen
});
console.log(this.data.isopen);
}
},
/**
* 页面的初始数据
*/
data: {
isopen:true
// 控制是否打开
},
/** * 判断给定的当前坐标是否超出了相对于初始坐标的指定最大距离。 * * @param {Array} currentCoord - 当前坐标点的数组,如:[x, y] * @param {Array} initialCoord - 初始坐标点的数组,如:[x, y] * @param {number} maxDistance - 允许的最大距离阈值 * @returns {boolean} - 如果当前坐标超出最大距离则返回true,否则返回false */ function hasExceededMaxDistance(currentCoord, initialCoord, maxDistance) { // 使用数组解构赋值,从currentCoord数组中分别获取x和y坐标值 const [currentX, currentY] = currentCoord; // 同样,从initialCoord数组中获取其x和y坐标值 const [initialX, initialY] = initialCoord; // 应用Math.hypot方法计算两点间的直线距离 // 这是一个更简洁且避免手动进行平方和开方操作的方法 const calculatedDistance = Math.hypot(currentX - initialX, currentY - initialY); // 检查计算出的距离是否大于允许的最大距离 // 如果超出,返回true;否则,返回false return calculatedDistance > maxDistance; } // 示例使用 let currentCoordExample = [15, 20]; // 假设的当前坐标 let initialCoordExample = [10, 10]; // 假设的初始坐标 let limitDistanceExample = 5; // 设置的最大允许距离 // 调用函数并打印结果 let result = hasExceededMaxDistance(currentCoordExample, initialCoordExample, limitDistanceExample); console.log(`是否超出最大距离:` + result); // 输出判断结果
isopen:this.data.isopen
}); 我比较困惑的是为什么我这个更新后x的位置没有随着isopen的值变化
isopen:this.data.isopen
});
这句话的意思是吧isopen设置成data里isopen的值
前面没有改变isopen的值 再怎么setdata也不会改变啊
if(cha<-20){
你这个判断是小于 -20
代码问题最好是参考文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html,创建一个可复现的代码片段分享出来