Closed minecraftfen closed 1 year ago
我觉得应该可以在网页中放一个一个隐藏的SVG,每产生一个触控移动事件就把坐标加入SVG的Path数据中,然后用Path标签内建的求长度方法获取移动距离
例子(未调试,仅会意):
<svg id="filckbox"> <!-- 注意让这个的尺寸和触屏区域一样大 -->
<path d="坐标列表" id="flick1">
<path d="坐标列表" id="filck2">
...
</svg>
<script>
'use strict';
var flickbox=document.getElementById("flickbox");
function pointerdown(e){
var obj=document.createElementNS("http://www.w3.org/2000/svg","path");
obj.d="M"+e.x+","+e.y; // "M(x),(y)",表示提笔移动到点击位置,无空格
e.target.obj=obj; // 别照着这个做,绝对行不通,不能多押
};
function pointermove(e){
e.target.obj.d+="L"+e.x+","+e.y; // "L(x),(y)",表示落移动到移动位置,无空格
if(e.target.obj.getTotalLength()>=25){ // 获取路径长度
var flag_flick=true; // 触发flick判定
};
};
function pointerup(e){
flickbox.removeChild(e.target.obj);
};
</script>
不过上面这个方法可能时空间复杂度相对求直线距离要大一些,我也不知道Phigros是求直线距离还是移动曲线长度的
滑动范围应该可以用计算几何相交的方式实现(虽然我也不知道怎么实现hhh)
滑动重置的话,应该有一个flag就行,就像我上面提到的flag_flick
,判定后把它重新放倒就可以了
我会考虑多种Flick判定方案,在后续版本同时进行测试:
概念:同一触摸点连续位移时两次更新判定之间仅能判定一个Flick
结果方案:实时计算速度并指定触发/更新单个Flick的速度(对于不同物理尺寸的设备可能存在手感差异,但应该问题不大)
我在游玩
sim-phi
时发现,似乎只需要移动大于1个像素的距离,就可以判定为滑动(触摸反馈变红),这导致sim-phi
中Filck时常可以当作蓝键点击,因为让人手从接触屏幕到离开产生的移动小于1像素比大于1像素还难。我记得phigros的Flick判定应该比这更复杂一些: