草庐IT

element-ui的el-select在ios移动端的兼容性适配

SoGreater 2023-04-03 原文

element-ui的el-select在ios移动端的兼容性适配

element-ui的el-select在ios的兼容性适配

今天的我在做一个h5的项目,发现element-plus(我使用的版本是2.2.19)里的el-selectios上需要点击2次才能打开下拉框。经过很久的研究和查阅无数资料(包括百度、谷歌搜索到的),都没有解决这个问题。最后我探究里面的根本原因,最后才自己找到解决方案, 可以仔细阅读这篇文章,帮助大家避坑。

1. 在ios移动端的表现

当我们使用el-select组件的时候,安卓手机表现正常,pc端也表现正常,但是ios上表现就不正常了,主要体现在一下几点:

  1. ios上,点击该组件第一次不能打开下拉选项
  2. 进一步探索,当没有默认值的时候,第一次点击事件就可以打开下拉选项,但是当有默认值的时候,就会出现先聚焦该组件,下拉框没有出现,在聚焦过后,在进行一次点击,才能打开下拉选项;

2. 寻找解决方案

发现这个问题后,我们在搜索引擎上查了好多的解决方案,但是并没有找到解决以上的问题,现在我把我找到的最多的解决方案列出来,并说明原因:

  1. 如何解决el-select下拉框在ios上 点击两次才能选中的问题
    这个解决方案,我看了一下,我也进行了尝试,但是没有解决以上的相关问题,原因主要是,.el-scrollbar .el-scrollbar__bar这个样式,其实是下拉框里面的样式,解决的应该是下拉框里面的选项在ios里面的需要点击2次才能选中的问题。
  2. vue3 element plus ios点击时无法获取焦点
    这种,1、FastClick该库我并没有进行尝试,因为使用了会导致项目太臃肿;2、el-input加了 ‘user-select’: ‘none’,该方法我进行了尝试,并没有解决。

3. 独立解决

在以上各种查询和探索下,并没有解决我的问题,所以,只能我自己寻找解决方案,其实应该是element-plusiosde 兼容性问题。

(1) 方案一:移动端替换了element

实现上就是,当是移动端的时候,我们使用vantui库来实现移动端的兼容性。该方案就是需要大量的资源来实现,但是是最好的解决方案,因为element在移动端的体验很不友好。

(2) 方案二:继续使用element做兼容

这个兼容性方案我在探索的过程中非常痛苦,当时不知道是怎么产生的。但是经过我不懈努力的尝试,终于找到了一个由CSS就可以解决点击2次的问题。


主要的问题就出现在上面的这2张图片上,第一张图片是没有点击的时候,第二张图片是第一次点击后,可以发现问题,点击后,span里面进行了if切换,而在ios里面,这个切换后,点击动作就消失了,所以我怀疑可能是这个el-select右侧的icon导致的,所以我进行了一轮尝试,把这一整个spandom进行display: none;,发现一次点击就可以出发下拉框的出现,这个也是为什么一定要有默认值才能需要点击2次,因为没有默认值,上面的if是不会切换的。


顺着这个思路,是这个span导致的问题,那我就进行了一系列尝试,针对span写入一些CSS,最后让我找到了,display: contents

.el-input .el-input__suffix {
	display: contents;
}

大概原理可以就是让这个span没有边框等,这样点击事件就可以透下去(猜测,后面我会弄清楚),这个也只是在ios上才有这个问题。

如果大家也遇到了这个问题,大家可以进行尝试

总结

  1. 在移动端上有各种奇葩的兼容性问题,需要耐心去对待
  2. 当前的这个问题,我提出了以上的2种解决方案,如果有好的解决方案,可以给我留言,谢谢

有关element-ui的el-select在ios移动端的兼容性适配的更多相关文章

  1. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  2. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  3. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  4. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  5. ruby-on-rails - 事件记录 : Select max of limit - 2

    我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).

  6. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  7. ruby-on-rails - rails 上的 ruby : radio buttons for collection select - 2

    我有一个集合选择:此方法的单选按钮是什么?谢谢 最佳答案 Rails3中没有这样的助手。在Rails4中,它是collection_radio_buttons. 关于ruby-on-rails-rails上的ruby:radiobuttonsforcollectionselect,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/18525986/

  8. ruby - Rails 3 - 我可以将开始日期设置为 date_select 方法吗? - 2

    date_select方法只能设置:start_year,但我想设置开始日期(例如3个月前的日期)(但没有这样的选项)。那么,我可以将开始日期设置为date_select方法吗?或者,要制作这样的选择框,我应该使用select_tag和options_for_select吗?或者,有什么解决办法吗?谢谢, 最佳答案 有可能……例如:start_year–设置年份选择的开始年份。默认为Time.now.year-5参见thisresource. 关于ruby-Rails3-我可以将开始日期

  9. ruby-on-rails - date_select ruby - 2

    如何在Ruby中扩展date_select的范围??它只显示2005年,我想用它作为出生日期。 最佳答案 您可以使用:start_year选项,参见thedocumentation. 关于ruby-on-rails-date_selectruby,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2047739/

  10. ruby-on-rails - 我应该使用哪个适用于 Ruby 的 CouchDB 适配器? - 2

    一些我找到的选项是ActiveCouchCouchRESTCouchPotatoRelaxDBcouch_foo我更喜欢GitHub上的项目,因为这让我更容易fork和推送修复。所有这些都符合该要求。我习惯了Rails,所以我喜欢像ActiveRecord模型一样工作的东西。另一方面,我也不希望我和Couch之间太多--毕竟我使用它作为我的数据库是有原因的。最后,它们似乎都得到了相当积极的维护(couch_foo可能是个异常(exception))。所以我想这归结为(不可否认和不幸的)主观:有没有人对他们有过好的或坏的经历? 最佳答案

随机推荐