From 2de8f1afcc28861b5850994dc7caa298f813ead6 Mon Sep 17 00:00:00 2001
From: xpz2018 <107107461@qq.com>
Date: Wed, 13 Oct 2021 19:22:36 +0800
Subject: [PATCH] no message
---
components/refresh-view/index.js | 92 +++++++++++++++++++++
components/refresh-view/index.json | 4 +
components/refresh-view/index.wxml | 21 +++++
components/refresh-view/index.wxss | 78 ++++++++++++++++++
components/refresh-view/scroll.wxs | 124 +++++++++++++++++++++++++++++
pages/agent/fragment/index.wxml | 2 +-
pages/agent/order/index.js | 3 +
pages/agent/order/index.json | 2 +-
pages/agent/order/index.wxml | 3 +-
9 files changed, 326 insertions(+), 3 deletions(-)
create mode 100644 components/refresh-view/index.js
create mode 100644 components/refresh-view/index.json
create mode 100644 components/refresh-view/index.wxml
create mode 100644 components/refresh-view/index.wxss
create mode 100644 components/refresh-view/scroll.wxs
diff --git a/components/refresh-view/index.js b/components/refresh-view/index.js
new file mode 100644
index 0000000..66bf919
--- /dev/null
+++ b/components/refresh-view/index.js
@@ -0,0 +1,92 @@
+// components/swiperefreshlayout/swiperefreshlayout.js
+Component({
+ options: {
+ addGlobalClass: true,
+ multipleSlots: true
+ },
+ properties: {
+ height: {
+ type: Number,
+ value: 800
+ },
+ threshold: { // 下拉刷新阈值,下拉距离超过该值触发刷新
+ type: Number,
+ value: 30
+ },
+ color: { // 下拉刷新进度条颜色
+ type: String,
+ value: 'black'
+ },
+ backgroundColor: { // 下拉刷新圆圈背景颜色
+ type: String,
+ value: 'white'
+ },
+ loadMoreEnable: { // 是否开启上拉加载
+ type: Boolean,
+ value: true
+ },
+ refreshing: {
+ type: Boolean,
+ value: false,
+ observer(value) {
+ this.setRefresh(false)
+ }
+ }
+ },
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ progressBarHeight: '', // 下拉刷新圆圈高度
+ rotate: '',
+ scrollTop: true, // 当前是否处于顶部
+ triggered: false // 当前下拉刷新状态,true表示下拉刷新已经被触发,false表示下拉刷新未被触发
+ },
+
+ lifetimes: {
+ attached: function() {
+ // 在组件实例进入页面节点树时执行
+ this.setData({ progressBarHeight: this.rpx2px(80) });
+ }
+ },
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ _scroll: function(e) {
+ // console.log(e);
+ if (e.detail.scrollTop <= 50) {
+ // 滚动到顶部
+ this.setData({ scrollTop: true });
+ } else {
+ this.setData({ scrollTop: false });
+ }
+ },
+ /**
+ * 滚动到底部
+ */
+ _scrollToLower: function(e) {
+ if (this.properties.loadMoreEnable) {
+ this.triggerEvent('loadmore');
+ }
+ },
+ /**
+ * 设置刷新状态
+ */
+ setRefresh: function(refreshing) {
+ if (this.data.triggered != refreshing) {
+ if (refreshing) {
+ // 触发刷新
+ this.triggerEvent('refresh');
+ }
+ this.setData({ triggered: refreshing });
+ }
+ },
+ /**
+ * rpx转px
+ */
+ rpx2px: function(rpx) {
+ return rpx / 750 * wx.getSystemInfoSync().windowWidth;
+ }
+ }
+})
\ No newline at end of file
diff --git a/components/refresh-view/index.json b/components/refresh-view/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/components/refresh-view/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/components/refresh-view/index.wxml b/components/refresh-view/index.wxml
new file mode 100644
index 0000000..eaab87e
--- /dev/null
+++ b/components/refresh-view/index.wxml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/refresh-view/index.wxss b/components/refresh-view/index.wxss
new file mode 100644
index 0000000..21617e0
--- /dev/null
+++ b/components/refresh-view/index.wxss
@@ -0,0 +1,78 @@
+/* components/swiperefreshlayout/swiperefreshlayout.wxss */
+
+.scroll-container {
+ width: 100%;
+ height: 100%;
+}
+
+.view-container {
+ display: flex;
+ flex-direction: column;
+}
+
+.view-refresh-content {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ z-index: 8;
+}
+
+.circle-progress-bar {
+ width: 80rpx;
+ height: 80rpx;
+ align-self: center;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border-radius: 50%;
+ box-shadow: 0 0 18rpx #ccc;
+ /* position: fixed; */
+ /* 这里margin-top没有取80rpx是为了防止露出阴影部分 */
+ margin-top: -90rpx;
+ z-index: 12;
+}
+
+@font-face {
+ font-family: "iconfont";
+ src: url('//at.alicdn.com/t/font_1677220_3np58ejrjzs.eot?t=1585209535266'); /* IE9 */
+ src: url('//at.alicdn.com/t/font_1677220_3np58ejrjzs.eot?t=1585209535266#iefix') format('embedded-opentype'),
+ /* IE6-IE8 */ url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAK8AAsAAAAABmgAAAJwAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcApwgRABNgIkAwgLBgAEIAWEbQcxG7cFyA4lQRHBTO0GAEwE4Ro5m+QJQLJiXUBZV1VXWUtoNEpSbBSTrL6f9nMP9VCOPrGEelL58u6L7nazhknCu3noy9AmCRoNfOLe8f/VeRfIfEC5rLlo0aQuoC4OpADHWhRZkUTeMHaBSzhOoNEoj6L9oYlpqFRY4wJxRlMEqMyFFIVl64XamqVF3FamPl1Jn8Ct8PvxRygqSWoyq+TQ6UEZer5n7BF5o9qwnLdszOcAW0XGMlCIY7WpA0oEY5RoTJWaBPsqDL5nqsq3iL0aBfvrrPxmMAxF9yR2JbeaTXBbXU0Cm6NuIybPZbPH8vkThcJJ2Oi5OO6bu9rsnb08B3X0XO54aeRkIx0/eXIt2Xxf4E3de/DwfINUHpwobf17ua+xD0zrPV9Gb6oLH/Jdfv78+Q6QZ8iHv6MHoPqXz/KWIgSvZv9+TzV0/K9vKuD19ebTMFD9K9DPA+r37Q7+kbhnQ9GlljkVVVzbmkyeu6xRIyrY1+lnrK7nhnKhXs8IT52RFFm9aaLQllGjyQpq1dtCoyXDq5t0YUpEacCiXYDQ7gNJq6fI2n0RhfaNGr3+Uas9StDoRLRs2WQ2tOp+hgJHmYhpokmOTR0rr44KJ1GJmwLLSkPmLLKYFiVBX6CYHUYb2RwzYgklxDkllDkWGQKnoWk6xGWOjhL3qZy7bX4/rXuTT3IsqLaHQQIOyQhRGqGROGzUb89Vlz4/CSniTALWUlfjnYWYGK13Isgn0IMYVtm96u7llZgERQjHUQTFOCzEEBiETCYH4dYP0iEJ56OOSLja+O1mtK/Kt77G+rod0MjSp7D7ZnVn1biQ0mwAAA==') format('woff2'),
+ url('//at.alicdn.com/t/font_1677220_3np58ejrjzs.woff?t=1585209535266') format('woff'),
+ url('//at.alicdn.com/t/font_1677220_3np58ejrjzs.ttf?t=1585209535266') format('truetype'),
+ /* chrome,
+ firefox,
+ opera,
+ Safari,
+ Android,
+ iOS 4.2+ */ url('//at.alicdn.com/t/font_1677220_3np58ejrjzs.svg?t=1585209535266#iconfont') format('svg'); /* iOS 4.1- */
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-shuaxin:before {
+ content: "\e6c2";
+}
+
+.loading {
+ width: 36rpx;
+ height: 36rpx;
+ border-radius: 50%;
+ border-bottom: 5rpx solid transparent;
+ animation: loading 1.5s infinite;
+}
+
+@keyframes loading {
+ 0% {
+ transform: rotate(0deg);
+ }
+
+ 100% {
+ transform: rotate(360deg);
+ }
+}
diff --git a/components/refresh-view/scroll.wxs b/components/refresh-view/scroll.wxs
new file mode 100644
index 0000000..83e1237
--- /dev/null
+++ b/components/refresh-view/scroll.wxs
@@ -0,0 +1,124 @@
+/**
+ * 下拉刷新的控制
+ */
+var startmark = 0; // 开始触摸屏幕的位置
+var newmark = 0; // 当前移动到的位置
+var maxDistance = 75; // 下拉最大距离(单位px)
+var triggered = false; // 当前下拉刷新状态,true表示下拉刷新已经被触发,false表示下拉刷新未被触发
+
+/**
+ * 手指触摸动作开始
+ */
+var touchStart = function(e, instance) {
+ var scrollTop = e.instance.getDataset().scrolltop;
+ // 当前处于顶部并且没有处于刷新状态
+ if (scrollTop && !triggered) {
+ startmark = e.touches[0].pageY;
+ } else {
+ return;
+ }
+}
+
+/**
+ * 手指触摸后移动
+ */
+var touchMove = function(e, instance) {
+ var scrollTop = e.instance.getDataset().scrolltop;
+ var circleProgressBarHeight = e.instance.getDataset().progressbarheight;
+ // 当前处于顶部并且没有处于刷新状态
+ if (scrollTop && !triggered) {
+ newmark = e.touches[0].pageY;
+ if (newmark < startmark) {
+ // 向上滑动
+ instance.selectComponent('.circle-progress-bar').setStyle({ 'transform': 'none' })
+ instance.selectComponent('.icon-shuaxin').setStyle({ 'transform': 'none', 'opacity': 0 })
+ } else if (newmark - startmark > maxDistance + circleProgressBarHeight) {
+ // 达到最大滑动距离
+ instance.selectComponent('.circle-progress-bar').setStyle({
+ 'transform': 'translateY(' + (maxDistance + circleProgressBarHeight) + 'px)'
+ });
+ instance.selectComponent('.icon-shuaxin').setStyle({
+ 'transform': 'rotate(270deg)',
+ 'opacity': 1
+ });
+ } else {
+ // 向下滑动,未到达最大滑动距离
+ instance.selectComponent('.circle-progress-bar').setStyle({
+ 'transform': 'translateY(' + (newmark - startmark) + 'px)'
+ });
+ // 计算加载进度条的透明度,当滑动距离为最大滑动距离的一半时opacity为1
+ var opacity = 0;
+ if (newmark - startmark <= (maxDistance + circleProgressBarHeight) / 2) {
+ opacity = 1 * (newmark - startmark) / (maxDistance + circleProgressBarHeight);
+ } else {
+ opacity = 1;
+ }
+ instance.selectComponent('.icon-shuaxin').setStyle({
+ 'transform': 'rotate(' + 270 * (newmark - startmark) / (maxDistance + circleProgressBarHeight) + 'deg)',
+ 'opacity': opacity
+ });
+ }
+ } else {
+ return
+ }
+}
+
+/**
+ * 手指触摸动作结束
+ */
+var touchEnd = function(e, instance) {
+ var scrollTop = e.instance.getDataset().scrolltop;
+ var threshold = e.instance.getDataset().threshold;
+ // 当前处于顶部并且没有处于刷新状态
+ if (scrollTop && !triggered) {
+ if (newmark - startmark < (threshold + 40)) {
+ // 滑动距离未达到阈值(这里的40为加载圈高度),回到原位
+ startmark = 0;
+ newmark = 0;
+ instance.selectComponent('.circle-progress-bar').setStyle({
+ 'transform': 'none',
+ 'opacity': 0,
+ 'transition-duration': '0.6s'
+ });
+ } else {
+ // 滑动距离达到阈值,触发刷新
+ startmark = 0;
+ newmark = 0;
+ instance.selectComponent('.circle-progress-bar').setStyle({
+ 'transform': 'none',
+ 'opacity': 0
+ });
+ instance.callMethod('setRefresh', true);
+ }
+ } else {
+ return;
+ }
+}
+
+/**
+ * 手指触摸动作被打断,如来电提醒,弹窗
+ */
+var touchCancel = function(e, instance) {
+ // 回到原位
+ startmark = 0;
+ newmark = 0;
+ instance.selectComponent('.circle-progress-bar').setStyle({
+ 'transform': 'none',
+ 'opacity': 0
+ });
+}
+
+/**
+ * 刷新状态变化监听
+ */
+var refreshStateChange = function(newValue, oldValue, ownerInstance, ins) {
+ triggered = newValue;
+}
+
+module.exports = {
+ touchStart: touchStart,
+ touchMove: touchMove,
+ touchEnd: touchEnd,
+ touchCancel: touchCancel,
+ refreshStateChange: refreshStateChange
+}
\ No newline at end of file
diff --git a/pages/agent/fragment/index.wxml b/pages/agent/fragment/index.wxml
index c89fdb4..4054702 100644
--- a/pages/agent/fragment/index.wxml
+++ b/pages/agent/fragment/index.wxml
@@ -21,7 +21,7 @@
-
+
diff --git a/pages/agent/order/index.js b/pages/agent/order/index.js
index 2de5bb3..e7f781c 100644
--- a/pages/agent/order/index.js
+++ b/pages/agent/order/index.js
@@ -106,6 +106,9 @@ Page({
}).catch(err => {
this.setData({ requesting: false, loading: false })
util.showToast(err)
+ }).then(() => {
+ this.refreshview = this.refreshview || this.selectComponent('#refreshview')
+ this.refreshview.setRefresh(false)
})
},
onTabChange: function ({ detail }) {
diff --git a/pages/agent/order/index.json b/pages/agent/order/index.json
index 122d518..83de2ad 100644
--- a/pages/agent/order/index.json
+++ b/pages/agent/order/index.json
@@ -1,6 +1,6 @@
{
"usingComponents": {
- "refresh-view": "/components/refresher/index",
+ "refresh-view": "/components/refresh-view/index",
"wux-tabi": "/components/tabi/index",
"wux-image": "/components/image/index",
"order-item": "/pages/agent/order-item/index",
diff --git a/pages/agent/order/index.wxml b/pages/agent/order/index.wxml
index 9c60e68..9a27871 100644
--- a/pages/agent/order/index.wxml
+++ b/pages/agent/order/index.wxml
@@ -11,7 +11,8 @@
-
+
+