移动端底部fixed固定定位输入框ios下不兼容
简短记录下最近开发移动端项目碰到的小坑,产品需求做一个售后对话页面,底部固定输入框,和微信对话差不多,但是在ios下,fixed失效,输入框被虚拟键盘挡住,在安卓下是正常的。
尝试过网上说的很多方法,因为每个页面的需求和布局可能不相同,比如我做的需要下拉刷新消息,上拉加载更多,用的是minit-UI来做,所以都没有效果
后面无奈用了两套代码,用
var u = navigator.userAgent, app = navigator.appVersion;
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
判断是安卓还是ios,安卓的继续底部用固定定位, ios底部也用固定定位,只是content内容主体部分用绝对定位
<div :class="isIOS?'input-bottom1':'input-bottom'">
<form style="width:70%;">
<input class="message-input" @focus="iosScrollT" @blur="iosScrollB" type="text" v-model="sendMess" >
</form>
<div class="footer-r" @click="postAdvisory">发送</div>
</div>
<div class="content" v-if="IOSis">
<div :style="mHeight">
<div class="service-list" v-for="(item,index) in infoList">
<div class="service-item" v-if="item.is_admin==1">
<i class="iconfont icon-kefuzixunhui"></i>
<div class="border-left-empty"></div>
<div class="message">{{item.content}}</div>
</div>
<div class="service-item1" v-else>
<div class="message1">{{item.content}}</div>
<div class="border-right-empty"></div>
<img :src="userImg"/>
</div>
</div>
</div>
<div ref="msg_end" style="height:40px;"></div>
</div>
.input-bottom1{
position: fixed;
bottom: 60px;
left: 0px;
width: 100%;
border-top: 1px solid #ccc;
background-color: #fff;
z-index: 9998 !important; display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */
display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */
display: -ms-flexbox; /* TWEENER - IE 10 */
display: -webkit-flex; /* NEW - Chrome */
display: flex; /* NEW, Spec - Opera 12.1, Firefox 20+ */
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
justify-content:space-between;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
padding: 10px 0;
background-color:#f5f5f7;
border-top:2px solid #dddddf;/*no*/
}
.content{
position: absolute;
top: 50px;
left: 0px;
right: 0px;
bottom: 50px;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
如此,虚拟键盘没有挡住底部的输入框了,但是输入框聚焦光标的时候还是被挡住了一部分,所以又用了@focus="" @blur=""监听输入框光标,改变bottom值:position: fixed;bottom: 60px;,输入框失焦又改成bottom: 0px;
还有用minit-UI来做下拉刷新消息,上拉加载更多不能兼容,所以ios端只能一次把消息加载完,然后进到页面时,页面自动滑动到最底部,从而可以查看到最新消息,所以就用了.scrollIntoView()
that.$refs.msg_end.scrollIntoView();
但是还有一个问题,点击底部自定义的发送按钮没有用,硬要点完成,把虚拟键盘放下去后,再点发送按钮才能把消息发送出去,所以只能监听输入框光标离开或虚拟键盘的动作
document.body.addEventListener('focusout', () => {
//软键盘收起的事件处理 })
$("#keyword").on('keypress', function(e) { //#keyword为input文本框
var keycode = e.keyCode;
var searchName = $(this).val();
if(keycode == '13') {//13为回车键
//触发事件
});
监听上面事件就发送消息,通过上面的处理亲测效果还不错,输入框能紧贴
另外这博客写的挺好的,可以参考https://blog.csdn.net/hahahhahahahha123456/article/details/82587621
移动端底部fixed固定定位输入框ios下不兼容的更多相关文章
- 移动端— position: fixed;固定定位解决方案
这里有个关键的东西叫做viewport,你经常在页面的头部里可以见到它: <meta name="viewport" content="width=device-w ...
- CSS——fixed 固定定位相对于父容器
position:fixed 固定定位 用 left top 都是相对于浏览器的. 我今天想给网页做一个固定定位的导航 偶然间发现.可以用margin 相对于父容器定位. 小伙伴们可以试试. 不用le ...
- 移动端底部导航固定配合vue-router实现组件切换
在我们平时练习或者实际项目中也好,我们常常遇到这么一个需求:移动端中的导航并不是在顶部也不是在底部,而是在最底部且是固定的,当我们点击该导航项时会切换到对应的组件.相信对于很多朋友而言,这是一个很简单 ...
- position之fixed固定定位、absolute绝对定位和relative相对定位
什么是层模型? 什么是层布局模型?层布局模型就像是图像软件PhotoShop中非常流行的图层编辑功能一样,每个图层能够精确定位操作,但在网页设计领域,由于网页大小的活动性,层布局没能受到热捧.但是在网 ...
- 【CSS3】---层模型position之fixed固定定位、absolute绝对定位和relative相对定位
什么是层模型? 什么是层布局模型?层布局模型就像是图像软件PhotoShop中非常流行的图层编辑功能一样,每个图层能够精确定位操作,但在网页设计领域,由于网页大小的活动性,层布局没能受到热捧.但是在网 ...
- position:fixed固定定位的用法
一.position:fixed:固定定位 1.实现某个元素在可视窗口的居中位置显示 1)给自身设置宽高: 2)给自身加position:fixed: 3)用margin向左移动自身宽度的一半,向上移 ...
- 记一次事件委托在 ios 下的兼容 bug
项目中碰到的兼容类 bug,记录一二. 页面上有几个同类型的控件,点击它们会触发一些事件,很显然,事件委托优于批量绑定.为了图方便,我将 click 事件绑定到了 document.body 上(绑定 ...
- div模拟textarea在ios下不兼容的问题解决
今天发现一个好东西,赶紧记下来,我在用textarea的时候,想要自适应高度,这样就不会出现滚动条.网上找了很多,都是用div模拟的,但是好扯淡,div模拟的在ios下不能聚焦并且不能输入.真坑... ...
- new Date在ios下的兼容bug
今天发现在ios下new Date("2019-03-06").getTime()返回NaN 原因是ios下不支持“-”必须用"/" 记录备忘 var d = ...
随机推荐
- Mysql 字符串指定位置插入空格
UPDATE flow_data_243 SET data_15=CONCAT(LEFT(data_15,10),' ',RIGHT(data_15,LENGTH(data_15)-10)) WHER ...
- Linux内核入门到放弃-页面回收和页交换-《深入Linux内核架构》笔记
概述 可换出页 只有少量几种页可以换出到交换区,对其他页来说,换出到块设备上与之对应的后备存储器即可,如下所述. 类别为 MAP_ANONYMOUS 的页,没有关联到文件,例如,这可能是进程的栈或是使 ...
- Python学习案例之Web版语音合成播报
前言 语音合成技术能将用户输入的文字,转换成流畅自然的语音输出,并且可以支持语速.音调.音量设置,打破传统文字式人机交互的方式,让人机沟通更自然. 应用场景 将游戏场景中的公告.任务或派单信息通过语音 ...
- Windows下的命令神器Cmder
1. 下载地址: https://cmder.net/ 建议安装完整版本 2.设置与基本使用 1)将cmder添加到环境变量中PATH 2)添加到右键 Cmder.exe /REGISTER ALL ...
- 2018年NGINX最新版高级视频教程
2018年NGINX最新版高级视频教程,想要的联系我,QQ:1844912514
- 数据结构排序算法插入排序Java实现
public class InsertDemo { public static void main(String args[]) { int[] sort ={4,2,1,3,6,5,9,8,10,7 ...
- PLC 数据类型
类型 长度(位) 取值范围 描述 BOOL 1 0/1 布尔型 BYTE 8 0x00~0xFF 十六进制数 WORD 16 0~65535 无符号整数 DWORD 32 0~4294967295 无 ...
- SpringBoot配置日志logback
1.这里我们选择logback,首先加入pom依赖 <dependency> <groupId>ch.qos.logback</groupId> <artif ...
- 微信小程序之初探(常见语法 VS vue)常见问题(点击不生效,数据绑定)
最近在调研微信小程序开发,对于一个前端小白来说,在各种框架都还用不熟的情况下,再来开发小程序确实还是不容易. 小程序出来之初,听过演讲,看过一点点儿视频,感觉和angular语法有点相似(PS:那是也 ...
- docker 镜像备份magento 2.2.3
打包百度网盘: 链接:https://pan.baidu.com/s/1i_lSLt48RlxPonVA7qG5kg 密码:h1de 还原:docker load < (filename).t ...