场景:悬浮球功能
当我给悬浮球设置了 position: fixed; 然后监听悬浮球的touch事件,从事件对象中拿到clientY和clientX赋值给悬浮球的left和top属性。当直接赋值后效果应该是这样子:
注意鼠标相对悬浮球的位置,应该就是左上角,因为left和top属性是从左上角作为起点的。但是当运行在h5页面中就是这样子:
可以看到x轴没问题但是y轴位置明显不对。经过很久的排查发现,是uniapp在h5项目运行时给一个表情加了position。众所周知如果给悬浮球设置定位,并且其祖先元素并未设置定位,那么悬浮球是相对body来定位的。但是uniapp给body内其中一个元素设置了定位,那么悬浮球的参照物就改变了。那么clientY和clientX拿到的却是相对视口的坐标。那么就出现了上图的位置偏差。下面是uniapp设置定位的图示:
知道了这个问题那么就很好解决了。这里就不贴啦,有很多解决办法,难不倒各位程序猿!!