当前位置:网站首页>uniapp scroll view 解决高度自适应、弹框滚动穿透等问题。
uniapp scroll view 解决高度自适应、弹框滚动穿透等问题。
2022-07-03 10:36:00 【wcdunf】
方法一:
在uniapp中scroll view 需要给固定高度,根据不同手机高度不一样,scroll view高度不相同,uniapp中不能进行dom操作,如何让scroll view适应不同手机高度,计算好高度如何给scroll view 设置高度呢
通过uni.getSystemInfoSync()获取窗口宽度和高度动态设置 scroll-view 高度 :style动态绑定height高度
打印uni.getSystemInfoSync()

这里获得的高度是物理高度px 如何转成rpx
在cumputed计算属性设置
computed:{
scrollH:function(){
let sys = uni.getSystemInfoSync();
let winWidth = sys.windowWidth;
let winrate = 750/winWidth;
let winHeight =parseInt(sys.windowHeight*winrate)
return winHeight
}
}
<scroll-view scroll-y="true" @scrolltolower="lower()" :style="{height:scrollH+'rpx'}">
// 内容
</scroll-view>
:style="{height:scrollH+'rpx'}"
这样就解决了这个问题~
方法二:
一、个人分析
简述
这个问题其实就是计算已经存在的组件的高度和整个页面可用的总高度,算出高度后再动态绑定style样式达到自适应。(总高度-其他组件高度 = 局部scroll-view 自适应的高度)
问题
首先,遇到这个问题,我的解决方法是搜索类似问题,寻找答案,在找的过程中,有几个问题让我迷惑
计算高度的这个方法应该写在什么地方?onReady(),computed(),还是methods里?
怎么计算页面可用总高度?组件的高度怎么获得?
怎么动态绑定高度?
解答
1.computed()属于vue框架中的知识,我们在运算时,会习惯在模板中运算,而这样会增加模板的负担,因而产生了用于实现简单运算来计算属性的computed()方法,具体了解参考文章:https://cn.vuejs.org/v2/guide/computed.html,而写在onReady()中能使每次加载时都计算一次高度,更新高度。所以我用的是onReady()
2.获取设备可用屏幕总高度。
uni.getSystemInfo({
success: function (res) {
var windowHeight= res.windowHeight;
}
});
获取组件高度,使用Id选择器,多组件的话就叠加使用
let view = uni.createSelectorQuery().select("#head");
view.boundingClientRect(data => {
_this.topHeight = data.height;
}).exec();
3.动态绑定高度
<scroll-view id="scrollbody" scroll-y="true" :style="{height:scrollerHeight}"></scroll-view>
数据
data() {
return {
phoneHeight: 0, //屏幕可用高度
topHeight: 0, //滑块上方高度
bottomHeight: 0, //底部高度
scrollerHeight: "",
}
},
二、完整代码展示
前端代码
<template name="home">
<view>
<view id="head">
<view class=" bg-white grid col-4 padding-lr-sm no-border margin-bottom-xs margin-lr-xs">
<view class="padding-sm animation-slide-bottom" :style="[{animationDelay: (index + 1)*0.1 + 's'}]" v-for="(item,index) in usList"
:key="index" @tap="goPage(item.page)">
<view class="radius text-center">
<view class="cu-avatar lg" :style="{background: 'url(' + item.icon + ') no-repeat',backgroundSize:'96upx 96upx'}">
<view class="cu-tag badge" v-if="getTtemDotInfo(item)">{
{getTtemDotInfo(item)}}</view>
</view>
<view class="text-sm margin-top">{
{item.title}}</view>
</view>
</view>
</view>
</view>
<scroll-view id="scrollbody" class="bg-white" scroll-y="true" :style="{height:scrollerHeight}">
<view class="cu-card article no-card">
<view class="cu-item" style="padding-bottom: 0rpx;" v-for="item in topN5" :key="item.id" @tap="goDetail(item)">
<view class="title">
<view class="text-cut">{
{item.title}}</view>
</view>
<view class="content">
<view class="desc margin-right-sm">
<view class="text-gray flex align-center justify-between" style="font-size: 12px;">
<view class="flex align-center justify-between">
<view class="cu-avatar round sm margin-right-sm" :style="{backgroundImage: 'url('+ item.portrait +')'}"></view>
<view class="text-grey text-sm text-bold">{
{item.realname}}</view>
</view>
</view>
<view class="text-content" style="color: #333333;">{
{item.content}}</view>
</view>
<image v-if="item.pics.length >= 1" :src="item.pics[0]" mode="aspectFill"></image>
</view>
<view class="text-sm flex justify-between" style="padding: 10upx 30upx 10upx;color: #afafaf">
<view>
<text class="cuIcon-attentionfill margin-lr-xs"></text>{
{item.viewCount}}
<text class="cuIcon-appreciatefill margin-lr-xs"></text> {
{item.zanNum}}
<text class="cuIcon-messagefill margin-lr-xs"></text> {
{item.commentNum}}
</view>
<view class="text-sm">{
{item.time}}</view>
</view>
<view class="padding-bottom-sm bg-gray"></view>
</view>
</view>
</scroll-view>
<view id="foot" class="bg-white cu-tabbar-height"></view>
</view>
</template>
js代码
export default {
data() {
return {
phoneHeight: 0, //屏幕可用高度
topHeight: 0, //滑块上方高度
bottomHeight: 0, //底部高度
scrollerHeight: "",
}
},
onReady() {
var height
var _this = this;
uni.getSystemInfo({
success: function(res) {
_this.phoneHeight = res.windowHeight;
//console.log("phoneHeight:" + res.windowHeight)
let view = uni.createSelectorQuery().select("#head"); //局部滑块
view.boundingClientRect(data => {
_this.topHeight = data.height;
//console.log("topHeight:"+data.height)
let otherview = uni.createSelectorQuery().select("#foot");
otherview.boundingClientRect(data => {
_this.bottomHeight = data.height
//console.log("bottomHeight:"+data.height)
height = _this.phoneHeight - _this.topHeight - _this.bottomHeight;
//console.log("scrollerHeight:"+height)
}).exec();
}).exec();
},
});
this.scrollerHeight = height + 'px';
}
参考文章
这些文章写得比我详细,迷糊的朋友可以看看这些文章:
https://blog.csdn.net/wosind/article/details/103111292?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
https://blog.csdn.net/qq_37968920/article/details/99191192?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-4.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-4.control
演示实例
演示实例就没有了,看以后有没时间补上吧,其实挺简单的,花时间研究一下很快就解决了,文章仅供参考。对于 vue 我也是学的不是很全,凑合着用吧。
边栏推荐
- Tablespace creation management and control file management
- 鸿蒙第三次培训(项目实训)
- Kotlin's use of the no Arg compiler plug-in in gradle
- 【obs】obs的ini格式的ConfigFile
- MATLAB提取不规则txt文件中的数值数据(简单且实用)
- 抓包整理外篇fiddler———— 会话栏与过滤器[二]
- Processes and threads
- Solicitation for JGG special issue: spatio-temporal omics
- Google Earth engine (GEE) - ghsl global population grid dataset 250 meter resolution
- Empire CMS no thumbnail smart tag (e:loop) two ways to judge whether there is a titlepic
猜你喜欢

LeetCode 46:全排列

PHP基础

Balance between picture performance of unity mobile game performance optimization spectrum and GPU pressure

基于I2C协议的驱动开发

一文搞懂Go语言Context

MATLAB提取不规则txt文件中的数值数据(简单且实用)

FL Studio 20无限试用版水果编曲下载

Redis things

MATLAB extrait les données numériques d'un fichier txt irrégulier (simple et pratique)

(2) Base
随机推荐
Gut | Yu Jun group of the Chinese University of Hong Kong revealed that smoking changes intestinal flora and promotes colorectal cancer (do not smoke)
PHP server interacts with redis with a large number of close_ Wait analysis
Technical experts from large factories: how can engineers improve their communication skills?
Application of high-precision indoor positioning technology in safety management of smart factory
Résumé des questions d'entrevue (2) Modèle io, ensemble, principe NiO, pénétration du cache, avalanche de rupture
Stm32hal library upgrades firmware based on flash analog U disk (detailed explanation)
How to: configure ClickOnce trust prompt behavior
ORACLE 11G 单机冷备数据库
VPP three-layer network interconnection configuration
软考中级软件设计师该怎么备考
Encapsulation attempt of network request framework of retro + kotlin + MVVM
Multi dimensional monitoring: the data base of intelligent monitoring
Project management essence reading notes (6)
Matlab extracts numerical data from irregular txt files (simple and practical)
C language log base zlog basic use
How PHP solves the problem of high concurrency
如何成为一名高级数字 IC 设计工程师(1-4)Verilog 编码语法篇:表达式
Nestjs配置服务,配置Cookie和Session
Reading notes: heart like Bodhi, Cao Dewang
How to make others fear you