热门标签 | 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;
}

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


推荐阅读
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • jQuery插件验证与屏幕键盘功能的集成解决方案
    本文介绍了一种集成了验证功能和屏幕键盘的jQuery插件解决方案。该插件不仅提供了强大的表单验证功能,还引入了一个高度可定制的屏幕键盘,以增强用户体验。通过这一集成方案,开发者可以轻松实现复杂的表单验证逻辑,并为用户提供便捷的输入方式,特别适用于移动设备或特殊输入场景。 ... [详细]
  • 需求:在指定的DIV区域内点击时,需展示该区域内的附加操作面板;而在区域外点击时,则应自动隐藏该附加操作面板。通过精准的事件监听与处理,确保用户交互体验的流畅性和直观性。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本地存储组件实现对IE低版本浏览器的兼容性支持 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在第10天的夜灵HTML日志中,我们深入探讨了浏览器兼容性和高级选择器的应用。CSS3引入了许多新属性,但在旧版浏览器中的支持情况并不理想。然而,目前主流浏览器的最新版本已全面支持这些新特性。对于那些不支持CSS3新属性的浏览器,我们提供了多种解决方案,以确保网站在不同环境下的兼容性和用户体验。此外,我们还详细讨论了如何利用高级选择器提升页面布局的灵活性和可维护性。 ... [详细]
  • 在HTML5应用中,Accordion(手风琴,又称抽屉)效果因其独特的展开和折叠样式而广泛使用。本文探讨了三种不同的Accordion交互效果,通过层次结构优化信息展示和页面布局,提升用户体验。这些效果不仅增强了视觉效果,还提高了内容的可访问性和互动性。 ... [详细]
  • 本文将详细介绍如何在 Vue 项目中使用 Handsontable 插件,包括 npm 安装、基本配置和常用功能的实现。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
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社区 版权所有