project init

This commit is contained in:
limqhz
2022-11-16 16:49:45 +08:00
parent 82dbb842ba
commit 597b107cf7
78 changed files with 1234 additions and 2524 deletions

213
components/scroll/index.js Normal file
View File

@@ -0,0 +1,213 @@
Component({
properties: {
// 加载中
requesting: {
type: Boolean,
value: false,
observer: 'requestingEnd',
},
// 加载完毕
end: {
type: Boolean,
value: false,
},
// 控制空状态的显示
emptyShow: {
type: Boolean,
value: false,
},
// 当前列表长度
listCount: {
type: Number,
value: 0,
},
// 空状态的图片
emptyUrl: {
type: String,
value: "/assets/image/empty/empty.png"
},
// 空状态的文字提示
emptyText: {
type: String,
value: "未找到数据"
},
// 是否有header
hasTop: {
type: Boolean,
value: false
},
// 下拉刷新的高度
refreshSize: {
type: Number,
value: 90,
observer: 'refreshChange'
},
// 底部高度
bottomSize: {
type: Number,
value: 0,
},
// 颜色
color: {
type: String,
value: ""
},
// iOS点击顶部状态栏、安卓双击标题栏时滚动条返回顶部只支持竖向
enableBackToTop: {
type: Boolean,
value: false
}
},
data: {
/* 未渲染数据 */
mode: 'refresh', // refresh 和 more 两种模式
successShow: false, // 显示success
successTran: false, // 过度success
refreshStatus: 1, // 1: 下拉刷新, 2: 松开更新, 3: 加载中, 4: 加载完成
move: -45, // movable-view 偏移量
scrollHeight1: 0, // refresh view 高度负值
scrollHeight2: 0, // refresh view - success view 高度负值
timer: null,
/* 渲染数据 */
scrollTop: 0,
overOnePage: false
},
methods: {
/**
* 处理 bindscrolltolower 失效情况
*/
scroll(e) {
// 可以触发滚动表示超过一屏
this.setData({
overOnePage: true
});
clearTimeout(this.data.timer);
this.setData({
timer: setTimeout(() => {
this.setData({
scrollTop: e.detail.scrollTop
})
}, 100)
});
},
/**
* movable-view 滚动监听
*/
change(e) {
let refreshStatus = this.data.refreshStatus,
diff = e.detail.y;
if (refreshStatus >= 3) return;
if (diff > -10) {
this.setData({
refreshStatus: 2
});
} else {
this.setData({
refreshStatus: 1
});
}
},
/**
* movable-view 触摸结束事件
*/
touchend() {
let refreshStatus = this.data.refreshStatus;
if (refreshStatus >= 3) return;
if (refreshStatus === 2) {
wx.vibrateShort();
this.setData({
refreshStatus: 3,
move: 0,
mode: 'refresh'
});
this.triggerEvent('refresh');
} else if (refreshStatus === 1) {
this.setData({
move: this.data.scrollHeight1
});
}
},
/**
* 加载更多
*/
more() {
if (!this.properties.end) {
this.setData({
mode: 'more'
});
this.triggerEvent('more');
}
},
/**
* 监听 requesting 字段变化, 来处理下拉刷新对应的状态变化
*/
requestingEnd(newVal, oldVal) {
if (this.data.mode === 'more') return;
if (oldVal === true && newVal === false) {
setTimeout(() => {
this.setData({
successShow: true,
refreshStatus: 4,
move: this.data.scrollHeight2
});
setTimeout(() => {
this.setData({
successTran: true,
move: this.data.scrollHeight1
});
setTimeout(() => {
this.setData({
refreshStatus: 1,
successShow: false,
successTran: false,
move: this.data.scrollHeight1
});
}, 350)
}, 1500)
}, 600)
} else {
if (this.data.refreshStatus !== 3) {
this.setData({
refreshStatus: 3,
move: 0
});
}
}
},
/**
* 监听下拉刷新高度变化, 如果改变重新初始化参数, 最小高度80rpx
*/
refreshChange(newVal, oldVal) {
if (newVal <= 80) {
this.setData({
refreshSize: 80
});
}
// 异步加载数据时候, 延迟执行 init 方法, 防止基础库 2.7.1 版本及以下无法正确获取 dom 信息
setTimeout(() => this.init(), 10);
},
/**
* 初始化scroll组件参数, 动态获取 下拉刷新区域 和 success 的高度
*/
init() {
let {windowWidth} = wx.getSystemInfoSync();
let successHeight = (windowWidth || 375) / 750 * 70;
this.createSelectorQuery().select("#refresh").boundingClientRect((res) => {
this.setData({
scrollHeight1: -res.height,
scrollHeight2: successHeight - res.height
});
}).exec();
},
},
ready() {
this.init();
}
});