博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iScroll滚动区域中select、input、textarea元素无法点击的Bug修复
阅读量:6851 次
发布时间:2019-06-26

本文共 1081 字,大约阅读时间需要 3 分钟。

  hot3.png

最近在一个项目中使用了iScroll4模拟滚动效果,调试过程中发现一个表单页中的所有表单项都无法点击聚焦,如<select>、<input>、<textarea>。这是因为iScroll要监听整个页面事件,为了达到最优效果,它默认禁用了所有元素的默认事件(但也有例外,如<a>默认事件不受影响),所以才造成这些表单元素点击没有反应,无法正常聚焦。

 

我们打开 iscroll.js ,找到这一行:

onBeforeScrollStart : function(e){ e.preventDefault(); },

将其改为:

onBeforeScrollStart : function(e){var nodeType = e.explicitOriginalTarget ? e.explicitOriginalTarget.nodeName.toLowerCase() : (e.target ? e.target.nodeName.toLowerCase() : ”);if(nodeType != ‘select’ && nodeType != ‘option’ && nodeType != ‘input’ && nodeType != ‘textarea’){e.preventDefault();}},

 

这样,input及textarea可以正常聚焦了,但是发现select点击还是没有弹出下拉列表框。

 

这是因为 iscroll 默认使用的是css的transform变形中的translate3d实现区域滚动,每次滚动实际是改变translate3d中的y轴值,实际的dom位置并没有发生变化。translate3d会导致页面的焦点错误,系统级下拉菜单的显示则会导致其出现显示偏离。

 

控制滚动模式的代码默认是:useTransform: true。好在iscroll提供了另一种滚动方式,基于绝对定位位置变化的滚动。修改为useTransform: false之后,iscroll就会使用对定位位方式来实现滚动,该方式是我们在web开发中模拟动画的最常用方式,滚动之后dom的实际位置也同步发生了变化,不会出现错位偏离现象。

 

以上修改后,所有的表单元素都能正常使用了,不过需要注意,使用对position决定定位后,滚动区的宽度默认会自适应内容宽度,而不是父元素的100%,所以最好将滚动区域宽度设为100%。如果还有任何疑问,欢迎QQ天南:46926125

转载于:https://my.oschina.net/wolfx/blog/620146

你可能感兴趣的文章
《CUDA高性能并行计算》----0.9 历史沿革
查看>>
怎么学好php
查看>>
百度为人工智能测试违规道歉
查看>>
[清华论文]数据资产估值,两年前我想到了这些...
查看>>
为什么蚊子永远不会被雨砸死?|别被孩子问住了!
查看>>
《个体软件过程》—第8章8.6节管理承诺的重要性
查看>>
乐视秒杀架构解读:从零开始搭建百万每秒订单系统
查看>>
Flink - StreamJob
查看>>
C语言及程序设计初步例程-35 问题求解方法——迭代
查看>>
Java面试必看二十问题
查看>>
《C语言及程序设计》实践参考——分支嵌套流程图-五等级成绩
查看>>
移动端网络优化
查看>>
测试并发应用(二)监控Phaser类
查看>>
云上游戏数据分析实践
查看>>
前端如何实现数据双向绑定
查看>>
视频码率那些事
查看>>
Android仿网易云音乐:留声机效果
查看>>
vue-cli项目升级webpack4踩坑
查看>>
Python爬虫框架,内置微博、自如、豆瓣图书、拉勾、拼多多等规则
查看>>
android View 的绘制流程
查看>>