Closed hatt-e4 closed 7 years ago
使用了
isMobile: /mobile|phone|android|pad/.test(ua)
这个语句判断是否为移动设备,能告知 windows 移动系统的 navigator.userAgent 是什么吗?
并不是 windows 移动系统,就桌面电脑 windows 系统,但windows支持触摸屏。 据我了解,js 还无法判断当前有没有使用触摸屏,而且就算能判断到,也不能很好的适应。比如我旁边有台测试电脑,是一体机,屏幕本身支持触摸,又外接鼠标,当然希望鼠标能操作,直接点击屏幕也能操作,那么 touch 和 mouse 都应该侦听。
所以,才希望有个设置参数,比如开启触摸、开启鼠标、都开启。默认还走原判断。
意思是添加一个选项 listen,可选值为 default、touch、mouse、all?
是这样的意思,但怎样实现要看大佬,我只是萌新。
@hatt-e4 事件监听在new JRoll
对象前执行的,而且不会每new一次就监听一次,所以不能添加到new JRoll
的选项里,而且这种需求也是极少数的,所以建议自己fork个版本出来,将以下代码修改一下
// 当前版本 JRoll 2.5.0
243 // 添加监听事件
244 addEvent(utils.isMobile ? 'touchstart' : 'mousedown', _touchstart)
245 addEvent(utils.isMobile ? 'touchmove' : 'mousemove', _touchmove)
246 addEvent(utils.isMobile ? 'touchend' : 'mouseup', _touchend)
247 if (utils.isMobile) {
248 addEvent('touchcancel', _touchend)
249 } else {
250 addEvent(/firefox/.test(ua) ? 'DOMMouseScroll' : 'mousewheel', _wheel)
251 }
删除isMobile判断,修改为:
addEvent('touchstart', _touchstart)
addEvent('mousedown', _touchstart)
addEvent('touchmove', _touchmove)
addEvent('mousemove', _touchmove)
addEvent('touchend', _touchend)
addEvent('mouseup', _touchend)
addEvent('touchcancel', _touchend)
addEvent(/firefox/.test(ua) ? 'DOMMouseScroll' : 'mousewheel', _wheel)
修改后的代码能不能满足你的需求就你自己测试啦:smile:
恩,我这也真不是平常情况。多谢大佬的热心!
非常棒的 code。
近期在使用时遇到这样的问题: 在触摸屏电脑上,windows 系统, JRoll 就判断非移动设备,只能 mouse 不能 touch。
希望能支持初始化参数设置当前是侦听 mouse 还是 touch