uni-app 快手小程序端动态设置swipe高度后swipe-item显示异常
uni-app 快手小程序端动态设置swipe高度后swipe-item显示异常
产品分类
uniapp/小程序
PC开发环境操作系统
Windows
PC开发环境操作系统版本号
Windows 10 专业版
HBuilderX类型
正式
HBuilderX版本号
4.15
第三方开发者工具版本号
1.46.1-9f9a84c-x64
基础库版本号
1.74.1
项目创建方式
HBuilderX
示例代码:
<template>
<view id="js_body" style="height: 100vh;display: flex;flex-direction:column;">
<swiper vertical :style="[bodyView]">
<swiper-item ><view>{{JSON.stringify(bodyView)}}</view></swiper-item>
<swiper-item ><view>{{JSON.stringify(bodyView)}}</view></swiper-item>
<swiper-item ><view>{{JSON.stringify(bodyView)}}</view></swiper-item>
<swiper-item ><view>{{JSON.stringify(bodyView)}}</view></swiper-item>
<swiper-item ><view>{{JSON.stringify(bodyView)}}</view></swiper-item>
<swiper-item ><view>{{JSON.stringify(bodyView)}}</view></swiper-item>
<swiper-item ><view>{{JSON.stringify(bodyView)}}</view></swiper-item>
<swiper-item ><view>{{JSON.stringify(bodyView)}}</view></swiper-item>
<swiper-item ><view>{{JSON.stringify(bodyView)}}</view></swiper-item>
</swiper>
</view>
</template>
<script>
export default {
data() {
return {
bodyView:{}
}
},
async onLoad() {
let {width,height} = await this.utils_getViewInfo('#js_body');
this.bodyView = {
width:`${width}px`,
height:`${height}px`,
background:`green`,
}
console.error(this.bodyView)
},
methods: {
utils_getViewInfo(id){
let that = this
return new Promise(function (resolve, reject){
that.$nextTick(()=>{
const query = uni.createSelectorQuery().in(that);
query.select(id).boundingClientRect(data => {
resolve&&resolve(data)
}).exec(()=>{});
})
})
}
}}
</script>
操作步骤:
需求:设置纵向滑动的swipe,并且swipe高度和界面一致(实际功能用于视频的上下滑动)
遇到的问题:动态调整swipe高度后,界面出显示多个swipe-item,仿佛swipe-item的高度并无重新渲染
尝试过以下方案: 测试1、将swipe-item一并设置高度,结果:swipe垂直滑动的效果并不理想 测试2、将动态设置的高度写死,swipe-item 恢复正常
备注:附件有测试代码
预期结果:
希望动态设置swipe高度后,swipe-item 能正常显示
实际结果:
界面出显示多个swipe-item
bug描述:
动态给纵向swipe设置高度后,swipe中并列显示多个swipe-item,仿佛swipe-item的高度并无重新渲染
附件
更多关于uni-app 快手小程序端动态设置swipe高度后swipe-item显示异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
感谢反馈新问题,我看一下
更多关于uni-app 快手小程序端动态设置swipe高度后swipe-item显示异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
目前怎么样呢
我这用vue文件试了下 感觉是nvue对快手不太友好导致的,最终我这做了两个页面,一个nvue用于app,一个vue用于快手
在 uni-app 中开发快手小程序时,如果你动态设置了 swipe
组件的高度,并且 swipe-item
显示异常,可能是由于以下几个原因导致的。以下是一些可能的解决方案:
1. 确保 swipe
高度设置正确
在动态设置 swipe
组件的高度时,确保你设置的高度是有效的,并且与 swipe-item
的内容高度一致。如果高度设置不正确,可能会导致 swipe-item
内容显示不全或布局错乱。
<template>
<view>
<swiper :style="{ height: swiperHeight + 'px' }">
<swiper-item v-for="(item, index) in list" :key="index">
<view>{{ item }}</view>
</swiper-item>
</swiper>
</view>
</template>
<script>
export default {
data() {
return {
swiperHeight: 300, // 动态设置的高度
list: ['Item 1', 'Item 2', 'Item 3']
};
}
};
</script>
2. 使用 v-if
或 v-show
控制 swipe-item
的显示
如果你在 swipe-item
中使用了 v-if
或 v-show
来控制显示,确保在切换时 swipe
的高度能够正确更新。你可以通过监听数据变化来重新计算 swipe
的高度。
<template>
<view>
<swiper :style="{ height: swiperHeight + 'px' }">
<swiper-item v-for="(item, index) in list" :key="index" v-if="item.visible">
<view>{{ item.content }}</view>
</swiper-item>
</swiper>
</view>
</template>
<script>
export default {
data() {
return {
swiperHeight: 300,
list: [
{ content: 'Item 1', visible: true },
{ content: 'Item 2', visible: false },
{ content: 'Item 3', visible: true }
]
};
},
watch: {
list: {
handler() {
this.calculateSwiperHeight();
},
deep: true
}
},
methods: {
calculateSwiperHeight() {
// 根据内容重新计算 swiper 的高度
this.swiperHeight = this.list.filter(item => item.visible).length * 100;
}
}
};
</script>
3. 强制刷新 swipe
组件
在某些情况下,动态设置高度后,swipe
组件可能没有正确刷新。你可以尝试通过强制刷新组件来解决这个问题。例如,通过 key
属性强制重新渲染 swipe
组件。
<template>
<view>
<swiper :key="swiperKey" :style="{ height: swiperHeight + 'px' }">
<swiper-item v-for="(item, index) in list" :key="index">
<view>{{ item }}</view>
</swiper-item>
</swiper>
</view>
</template>
<script>
export default {
data() {
return {
swiperHeight: 300,
list: ['Item 1', 'Item 2', 'Item 3'],
swiperKey: 0
};
},
methods: {
refreshSwiper() {
this.swiperKey += 1; // 通过改变 key 强制刷新 swiper 组件
}
}
};
</script>
4. 检查 CSS 样式
确保 swipe
和 swipe-item
的 CSS 样式没有冲突或覆盖。特别是 height
、width
、overflow
等属性,可能会影响布局。
swiper {
width: 100%;
height: 300px;
overflow: hidden;
}
swiper-item {
width: 100%;
height: 100%;
}
5. 快手小程序特有的问题
快手小程序可能存在一些特有的问题或限制。你可以查看快手小程序的官方文档,或者尝试在社区中寻找类似问题的解决方案。
6. 使用 nextTick
确保 DOM 更新
如果你在动态设置高度后立即进行操作,可能需要使用 nextTick
来确保 DOM 已经更新。
this.$nextTick(() => {
// 确保 DOM 更新后再进行操作
});