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

移动常见疑难问题

平时的开发过程中,经常会遇到一些疑难杂症,在这里记录一下常用的解决方案。UI小姐姐要求的0.5px线原因:不同手机的兼容不一样,尤其安卓IOS的Safari表现是比较好的,safa

平时的开发过程中,经常会遇到一些疑难杂症,在这里记录一下常用的解决方案。

UI小姐姐要求的0.5px线

原因:不同手机的兼容不一样,尤其安卓
IOS的Safari表现是比较好的,safari是可以支持浮点型的属性的。因此在IOS的系统中,0.5px是可以实现的。但在Andriod手机下,有些Andriod系统的浏览器,会对浮点型数据执行四舍五入的情况,即给元素设置border-width:0.5px,那么其表现与你设置border-width:1px;是相同的。

方案一:放大2倍再缩小

// 放大再缩小
&:before{
content: '';
position: absolute;
top: 0;
left: 0;
width: 200%;
height: 200%;
border: 1px solid #565D66;
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-ms-transform-origin: 0 0;
-o-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scale(0.5, 0.5);
-ms-transform: scale(0.5, 0.5);
-o-transform: scale(0.5, 0.5);
transform: scale(0.5, 0.5);
}

方案二:修改透明度为0.5,线条四周看起来会淡很多,或许能骗过小姐姐。

点击穿透问题

原因:移动浏览器提供一个特殊的功能:双击(double tap)放大。导致了著名300ms的时间延迟问题。click是在touch系列事件发生后大约300ms才触发的,混用touch和click就会导致点透问题。

方案一:300毫秒之后再消失弹窗,做个动画消失效果过渡。

setTimeout(() => {
dialog.close();
}, 300);

方案二:touchStart后300ms都被一个透明不可见的div去覆盖,第二个click是点不到对应的a。

// html



// js
function onDeviceReady() {
setTimeout(function(){ $('#preventClick').hide(); }, 300);
}

方案三:使用fastClick,个人认为最好最简单的方法

方案四:页面全部点击事件换成click,这样会感觉慢慢慢

方案五:页面全部事件换成touch事件,但需要注意的是a标签的href也是click。

Android 浏览器文本垂直居中

原因:在开发中,常使用 line-height 属性来实现文本的垂直居中,但是在安卓浏览器渲染中有一个常见的兼容问题,就是对于小于12px的字体,尤其是奇数的字体大小,使用 line-height 属性进行垂直居中的时候,渲染出来的效果会偏上一些。

方案一:放大两倍,再用 scale 进行缩小一倍

div {
display: inline-block;
height: 40px;
line-height: 40px;
font-size: 20px;
transform: scale(0.5);
transform-origin: 0%, 0%;
}

方案二:使用table布局

// html
// 需要在外面套一层


#

// css
.wrap {
display: table;
}
.content {
font-size: 10px;
display:table-cell;
vertical-align: center;
}

输入框 focus 以后,软键盘遮挡输入框的情况

尝试 input 元素的 scrollIntoView 进行修复。

// 安卓手机,键盘挡住输入框
if (/Android/gi.test(navigator.userAgent)) {
window.addEventListener('click', function () {
try{
if (document.activeElement.tagName == 'INPUT' || document.activeElement.tagName == 'TEXTAREA') {
var inputType = document.activeElement.type;
if(inputType == 'checkbox') return;
setTimeout(function() {
document.activeElement.scrollIntoView(true);
}, 0)
}
}catch(e){
console.log('安卓兼容键盘挡住输入框报错', e);
}
})
}

fixed+Input

原因:ios下fixed元素容易定位出错,软键盘弹出时,影响fixed元素定位。在某些安卓机下,键盘弹起会引起窗口高度(html标签的高度)变小,而fixed定位是相对于html根元素的,所以会被顶上来了。

方案一:弹起软键盘的时候,把fixed定位的元素改成block,回归文档流,当输入框失去焦点时,又变成fixed定位,还要把滚动条距离记录下。

var screenHeight = document.body.offsetHeight; // 获取视图原始高度
window.Onresize= function(){
if (document.body.offsetHeight document.getElementsByTagName("nav")[0].style.display = "none";
}else{
document.getElementsByTagName("nav")[0].style.display = "block";
}
};

方案二:iscroll能较好地处理fixed滚动的问题。

禁止蒙层底下页面跟随滚动

原因:弹窗是常见的交互方式,而蒙层是弹窗必不可少的元素。但是,在蒙层元素过长滑动的时候,滑到内容的尽头时,再继续滑动,蒙层底部的页面会开始滚动。这是因为触发了冒泡,使得父元素跟着滚动。

方案:很简单,防止出现冒泡即可。设置滚动容器和弹窗为同级节点。

// css
#root{
height: 100%;
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
}

《移动常见疑难问题》
《移动常见疑难问题》


推荐阅读
  • 巧用arguments在Javascript的函数中有个名为arguments的类数组对象。它看起来是那么的诡异而且名不经传,但众多的Javascript库都使用着它强大的功能。所 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 一、什么是闭包?有什么作用什么是闭包闭包是定义在一个函数内部的函数,它可以访问父级函数的内部变量。当一个闭包被创建时,会关联一个作用域—— ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • ECMA262规定typeof操作符的返回值和instanceof的使用方法
    本文介绍了ECMA262规定的typeof操作符对不同类型的变量的返回值,以及instanceof操作符的使用方法。同时还提到了在不同浏览器中对正则表达式应用typeof操作符的返回值的差异。 ... [详细]
  • 本文是一篇翻译文章,介绍了async/await的用法和特点。async关键字被放置在函数前面,意味着该函数总是返回一个promise。文章还提到了可以显式返回一个promise的方法。该特性使得async/await更易于理解和使用。本文还提到了一些可能的错误,并希望读者能够指正。 ... [详细]
  • 前段时间做一个项目,需求是对每个视频添加预览图,这个问题最终选择方案是:用canvas.toDataYRL();来做转换获取视频的一个截图,添加到页面中,达到自动添加预览图的目的。 ... [详细]
  • Python中的PyInputPlus模块原文:https ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
author-avatar
LoveCherryz
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有