解决Uniapp沉浸式下,input或textarea页面被顶起的问题

uni-app中实现沉浸式状态栏与textarea交互优化
文章介绍了如何在uni-app中配置沉浸式状态栏,并使用textarea组件,特别是在键盘弹起时如何通过调整页面和textarea的位置,确保textarea能被顶在软键盘上方,提供更好的用户体验。同时,利用uni.onKeyboardHeightChange监听键盘高度变化,动态调整页面元素高度。

设置沉浸式

"app-plus": {
    "statusbar": {
           //可选,字符串类型,沉浸式状态栏样式,可取值none、suggestedDevice、supportedDevice
          "immersed": "none",
    },
}

使用textarea(https://uniapp.dcloud.net.cn/component/textarea.html#)演示:

adjust-position属性:键盘弹起时,是否自动上推页面

fixed属性:如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true

小技巧:通过view的动态高度设置,将textarea顶起,达到textarea被顶在软键盘上面的效果

<template>
   <!--设置页面不会被顶起 -->
    <textarea :adjust-position="adjustPosition"></textarea>
   <!--键盘弹出时增高,达到textarea被顶在软键盘上面的效果 -->
    <view v-if="!adjustPosition" :style="[{ 'height':rjpHeight + 'px'}]"></view>
</template>

<script>
export default {
    data() {
            return {
                isIndex: false,
                rjpHeight:0,
                adjustPosition: false,
            }
        },
        mounted() {
            uni.onKeyboardHeightChange(res => {
                this.rjpHeight = res.height;
                if (this.isIndex && res.height > 0) {//isIndex是指在首页有tab的情况,如果在其他页面可忽略
                    this.rjpHeight = res.height - 45; //45=app底部tab的高度
                }
            })
        },
}
</script>

在使用 `el-input` 的 `textarea` 类型时,如果输入内容导致文本区域高度自适应,可能会引发页面自动滚动的问题。这个问题通常出现在 `autosize` 属性与页面布局滚动行为的交互中。以下是一些解决方法: ### 使用 `autosize` 时控制 `textarea` 的溢出行为 可以通过 CSS 控制 `el-textarea__inner` 的溢出行为,避免页面滚动。例如,设置 `overflow: hidden` 可以防止滚动条的出现,从而避免页面自动滚动: ```css .el-textarea__inner { overflow: hidden !important; } ``` 这种方法适用于在 `v-show` 其他条件切换时,`textarea` 高度变化导致的页面滚动问题 [^1]。 ### 使用 `this.$nextTick` 控制滚动行为 在某些情况下,比如在表格 (`el-table`) 中使用 `textarea`,切换分页后可能会出现滚动失效的问题。可以通过在 `this.$nextTick` 中直接修改样式来解决: ```javascript this.$nextTick(() => { const table = this.$refs.tableRef.$el; const bodyWrapper = table.querySelector(".el-table__body-wrapper"); if (bodyWrapper) { // 直接修改内联样式 bodyWrapper.style.overflowY = "auto"; } }); ``` 这种方法可以确保在 DOM 更新后重新设置滚动行为,从而避免页面自动滚动 [^4]。 ### 结合 `resize: none` 禁止手动调整 为了进一步优化用户体验,可以结合 `resize: none` 来禁止用户手动调整文本框的尺寸,从而避免不必要的滚动行为: ```css .el-textarea__inner { overflow: hidden; resize: none; } ``` 这种方法可以与 `autosize` 属性一起使用,确保文本框的高度自适应且不会引发页面滚动 [^3]。 ### 总结 通过上述方法,可以有效解决 `el-input` 的 `textarea` 输入时页面自动滚动的问题。根据具体的应用场景,选择合适的 CSS 样式和 JavaScript 代码来控制滚动行为,可以提升用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值