热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

移动端前端bug汇总

移动端前端bug汇总参考:https:www.cnblogs.comiovecp9729316.html手机固有某些手机上fixed元素在页面滚动时会消失使

移动端前端bug汇总

参考: https://www.cnblogs.com/iovec/p/9729316.html

手机固有

  • 某些手机上 fixed 元素在页面滚动时会消失
    使用局部滚动,而不是整页滚动

  • 某些 IOS 设备上触发不了点击事件
    在元素上加 pointer:cursor

  • IOS 设备上点击事件有 300ms 延迟

    • 使用 fastclick.js(推荐)
    • 不绑 click 事件,绑在 tap 事件上(此方法会导致开发时调试困难,模拟设备模式下触发 tap 有 bug)
  • **IOS设备input框调取键盘不灵敏、甚至失效。安卓没问题。因为ios为了解决300ms延迟使用了fastclick,fastclick会产生点击穿透 **

    • mian.js
      // 问题:当使用FastClick 时,input框在ios上点击输入调取手机自带输入键盘不灵敏,有时候甚至点不出来。而安卓上完全没问题。这个原因是因为FastClick的点击穿透。
      // FastClick的ios点击穿透解决方案
      import Fastclick from \'fastclick\'
      Fastclick.prototype.focus = function (targetElement) {
        let length
        if (targetElement.setSelectionRange && targetElement.type.indexOf(\'date\') !== 0 && targetElement.type !== \'time\' && targetElement.type !== \'month\') {
      	length = targetElement.value.length
      	targetElement.focus()
      	targetElement.setSelectionRange(length, length)
        } else {
      	targetElement.focus()
        }
      }
      
      Fastclick.attach(document.body)
      
  • IOS 区域滚动卡顿不丝滑
    加上 -webkit-overflow-scrolling: touch

  • 某些手机上点击时元素高亮闪一下
    加上 -webkit-tap-highlight-color: rgba(0, 0, 0, 0)

  • 隐藏滚动条
    加上 ::-webkit-scrollbar{ display: none }

  • IOS 设备上 fixed 元素在键盘弹起时位置会变幻不定
    没有很好的解决方案,应从产品设计层面避免这种情况(比如说做转场页面等)

  • 在弹窗上滑动时底部页面也跟着动
    在弹窗上需要滚动的地方使用 Swiper,不需要滚动的地方加Ontouchmove="event.preventDefault()"

  • 某些 IOS 设备上页面滚动时不会连续触发 scroll 事件
    绑在 touchmove 事件上,但手指离开屏幕惯性滑动这段时间还是无法触发,如果确实需要精细控制,可考虑IScroll.js

  • 浏览器刷新页面后会记忆之前的滚动条位置
    这通常可以提升用户体验,但有时我们需要禁止这种记忆,加上下面两行

    history.scrollRestoration = \'manual\'
    window.Onunload= () => window.scrollTo(0, 0)
    
  • h5 video 无法自动播放
    无法实现,无法实现,无法实现。这是厂商为避免偷取流量强制规定的。两个方法,一是从产品设计层面规避,二是降级为用户触屏播放,没有第三种可能

兼容性部分

  • Array.prototype.sort 方法在某些手机上会不起作用
    sort 方法传入的比较函数应该返回一个数值,而不是布尔值。也就是应该使用 - 号,而不是 ><

  • Object.assign 方法在某些手机上会不起作用

    • 参考 jQuery 的 $.extend 实现自己的对象合并方法。
    • 引入了 Babel 的 polyfill 。注意,Babel 仅转译语法,而不转译 API,所以使用这些 ES6+ 的 API 都存在不兼容的风险,如果引入了 Babel 的 polyfill,那就不用担心,否则就需要自己 polyfill
  • CSS3 特性(flex 布局,transform 等)不支持
    加上前缀,加上前缀,加上前缀。加完前缀不敢说 100% 支持吧,90% 还是有保证的,尤其是移动端。
    手动加是不可能手动加的,可使用 autoprefixer 配合构建工具处理

  • 1 像素问题
    这里的1像素并非1逻辑像素(也就是CSS像素),而是1物理像素,可以采用缩放的方法实现,首先设置 width: 1px,然后使用媒体查询根据不同的dpr缩放不同的比例,贴一下 less 的实现

    .one-x { height: 1px;}
    .one-y { width: 1px; }
    
    @dpr: 1.5, 2, 3;
    @len: length(@dpr) + 1;
    .genScale(@n: 1) when (@n <@len) {
      @val: extract(@dpr, @n);
      @media (min-device-pixel-ratio: @val) {
    	.one-x {
    	  transform: scaleY(1/@val);
    	}
    
    	.one-y {
    	  transform: scaleX(1/@val);
    	}
      }
      .-fix-less-compiler-bug- {
    	display: block;
      }
      .genScale(@n + 1);
    }
    
    .genScale();
    
  • 吸顶问题
    IOS 直接使用 position: sticky,安卓机型绑 scroll 事件。(需要提一句的是,IOS 的 scroll 事件触发不连续,安卓对 sticky 的支持不太好。所以上面的方法是比较科学地)附上机型判断代码

    const ua = window.navigator.userAgent.toLowerCase()
    const isAndroid = /android/.test(ua)
    const isIOS = /iphone|ipad|ipod/.test(ua)
    

Vue

  • Vue 修改了数据对象视图不更新
    就是不更新,就是不更新,就是不更新。这个官网还有写了。这个和 Vue 监测数据变化的机制有关Vue 无法检测到对象的新增属性和 vm.arr[index] = newVal这种方式更新的数组变化。可用以下方法触发

    vm.arr = [ ...vm.arr ]
    vm.obj = { ...vm.obj }
    



  • ****+ ****


  • ****+ ****


  • ****+ ****


  • ****+ ****




推荐阅读
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Java源代码安全审计(二):使用Fortify-sca工具进行maven项目安全审计
    本文介绍了使用Fortify-sca工具对maven项目进行安全审计的过程。作者通过对Fortify的研究和实践,记录了解决问题的学习过程。文章详细介绍了maven项目的处理流程,包括clean、build、Analyze和Report。在安装mvn后,作者遇到了一些错误,并通过Google和Stack Overflow等资源找到了解决方法。作者分享了将一段代码添加到pom.xml中的经验,并成功进行了mvn install。 ... [详细]
  • 本文介绍了CSS样式属性text-overflow、overflow、white-space、width的使用方法和效果。通过设置这些属性,可以实现文本溢出省略号、隐藏溢出内容、禁止换行以及限制元素宽度等效果。详细讲解了每个属性的作用和用法,以及常见的应用场景和注意事项。对于前端开发者来说,掌握这些CSS样式属性的使用方法,能够更好地实现页面布局和文本显示效果。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
author-avatar
诗人不失神
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有