一、使用场景
scroll-view滚动范围不支持通过百分比以及flex:1进行设置,所以需要计算出一个准确的高度;
二、实现思路
通过获取根标签下所有一级标签高度以及设置的上下外边距之和,再由根标签高度进行相减最终得出滚动高度
三、实现方法
代码如下
/**
* 获取scroll-view组件的最佳滚动高度
* @param {array} 包含元素类名、id的数组
* @example ['.header','#content']
* @param {string} 根标签元素类名、id
* @param {number} 一级元素上下margin总和
* @return {string} 滚动高度
* @example '1020px'
* @description 如一级标签涉及v-if、v-show,需要在判断条件变化时进行调用(建议在nextTick中进行调用)
*/
queryRightScrollHeight(childList,parent,margin){
const query = uni.createSelectorQuery().in(this);
let scroll = []
childList.forEach(element => {
query.select(`${element}`).boundingClientRect(data => {
let obj = {
key:element,
value: data.height
}
if(!scroll.length){
scroll.push(obj)
}else{
if(scroll.every(val=>val.key !== obj.key)){
scroll.push(obj)
}
}
}).exec();
});
let currentHeight = 0
query.select(`${parent}`).boundingClientRect(data => {
console.log(data,"data");
scroll.forEach(element=>{
currentHeight += element.value
})
currentHeight = data.height - currentHeight - margin + 'px'
}).exec();
return currentHeight
}