开始

关注列表里面的,上拉加载功能

首页做过,直接复制首页的上拉加载代码。

复制之前做好的loadMore组件
image.png

  1. import loadMore from '@/components/common/load-more.vue';
  2. loadMore

image.png
使用 组件
image.png

  1. <!-- 上拉加载 -->
  2. <load-more></load-more>

把list放在新定义的关注里面
image.png
image.png

  1. guanzhu:{
  2. loadtext:"上拉加载更多",
  3. list:[
  4. // 文字
  5. {
  6. userpic:"../../static/demo/userpic/12.jpg",
  7. username:"哈哈",
  8. sex:0, //0 男 1 女
  9. age:25,
  10. isguanzhu:false,
  11. title:"我是标题",
  12. titlepic:"",
  13. video:false,
  14. share:false,
  15. path:"深圳 龙岗",
  16. sharenum:20,
  17. commentnum:30,
  18. goodnum:20
  19. },
  20. // 图文
  21. {
  22. userpic:"../../static/demo/userpic/12.jpg",
  23. username:"哈哈",
  24. sex:0, //0 男 1 女
  25. age:25,
  26. isguanzhu:false,
  27. title:"我是标题",
  28. titlepic:"../../static/demo/datapic/13.jpg",
  29. video:false,
  30. share:false,
  31. path:"深圳 龙岗",
  32. sharenum:20,
  33. commentnum:30,
  34. goodnum:20
  35. },
  36. // 视频
  37. {
  38. userpic:"../../static/demo/userpic/12.jpg",
  39. username:"哈哈",
  40. sex:0, //0 男 1 女
  41. age:25,
  42. isguanzhu:false,
  43. title:"我是标题",
  44. titlepic:"../../static/demo/datapic/13.jpg",
  45. video:{
  46. looknum:"20w",
  47. long:"2:47"
  48. },
  49. share:false,
  50. path:"深圳 龙岗",
  51. sharenum:20,
  52. commentnum:30,
  53. goodnum:20
  54. },
  55. // 分享
  56. {
  57. userpic:"../../static/demo/userpic/12.jpg",
  58. username:"哈哈",
  59. sex:0, //0 男 1 女
  60. age:25,
  61. isguanzhu:false,
  62. title:"我是标题",
  63. titlepic:"",
  64. video:false,
  65. share:{
  66. title:"我是分享的标题",
  67. titlepic:"../../static/demo/datapic/14.jpg"
  68. },
  69. path:"深圳 龙岗",
  70. sharenum:20,
  71. commentnum:30,
  72. goodnum:20
  73. },
  74. ]
  75. }

循环guan.list
image.png

  1. <block v-for="(item,index) in guanzhu.list" :ket="index">

image.png

  1. <load-more :loadtext="guanzhu.loadtext"></load-more>

监听处理事件
image.png

  1. @scrolltolower="loadmore(index)"

复制首页上拉加载的代码
image.png
替换关键字
image.png
复制图文的数据到这里。
image.png

  1. // 上拉加载
  2. loadmore() {
  3. if (this.guanzhu.loadtext != "上拉加载更多") {
  4. return;
  5. }
  6. // 修改状态
  7. this.guanzhu.loadtext = "加载中...";
  8. // 获取数据
  9. setTimeout(() => {
  10. //获取完成
  11. let obj = {
  12. userpic: "../../static/demo/userpic/12.jpg",
  13. username: "哈哈",
  14. sex: 0, //0 男 1 女
  15. age: 25,
  16. isguanzhu: false,
  17. title: "我是标题",
  18. titlepic: "../../static/demo/datapic/13.jpg",
  19. video: false,
  20. share: false,
  21. path: "深圳 龙岗",
  22. sharenum: 20,
  23. commentnum: 30,
  24. goodnum: 20
  25. };
  26. this.guanzhu.list.push(obj);
  27. this.guanzhu.loadtext = "上拉加载更多";
  28. }, 1000);
  29. // this.guanzhu.loadtext="没有更多数据了";
  30. }

image.png
啦到底部,加载了新的
image.png
会有回弹的效果。如果不喜欢可以禁用掉。
首页是在这里加的。
image.png
加上这句话就可以了。
image.png

  1. "bounce": "none", // 关闭反弹效果

最终修改注意事项。

按照视频中编写代码后,无法触发触底的事件,
解决方法如下:
在scroll-view上加上scroll-top的属性。srcollTopValue这个是自定义的属性值。
同时给scroll-view也加上高度是页面加载后计算出来的高度。
image.png

image.png
scroll事件。滚动条以滚动 就更新滚动条的高度
image.png

最终代码

news.vue

  1. <template>
  2. <view>
  3. <news-nav-bar :tabBars="tabBars" :tabIndex="tabIndex" @change-tab="changeTab"></news-nav-bar>
  4. <view>
  5. <swiper class="swiper-box" :style="{height: swiperheight+'px'}" :current="tabIndex" :change="tabChange">
  6. <!-- 关注 -->
  7. <swiper-item>
  8. <scroll-view scroll-y class="list"
  9. @scrolltolower="loadmore(index)"
  10. @scroll="scroll"
  11. :scroll-top="srcollTopValue"
  12. :style="{height: swiperheight+'px'}">
  13. <!-- 列表 -->
  14. <block v-for="(item,index) in guanzhu.list" :ket="index">
  15. <common-list :item="item" :index="index"></common-list>
  16. </block>
  17. <!-- 上拉加载 -->
  18. <load-more :loadtext="guanzhu.loadtext"></load-more>
  19. </scroll-view>
  20. </swiper-item>
  21. <!-- 话题 -->
  22. <swiper-item>
  23. <scroll-view scroll-y class="list">
  24. 话题
  25. </scroll-view>
  26. </swiper-item>
  27. </swiper>
  28. </view>
  29. </view>
  30. </template>
  31. <script>
  32. import commonList from '@/components/common/common-list.vue';
  33. import newsNavBar from '@/components/news/news-nav-bar.vue';
  34. import loadMore from '@/components/common/load-more.vue';
  35. export default {
  36. components: {
  37. commonList,
  38. newsNavBar,
  39. loadMore
  40. },
  41. data() {
  42. return {
  43. swiperheight: 500,
  44. srcollTopValue:0, // 默认是0
  45. tabIndex: 0,
  46. tabBars: [{
  47. name: '关注',
  48. id: 'guanzhu'
  49. },
  50. {
  51. name: '话题',
  52. id: 'toppic'
  53. },
  54. ],
  55. guanzhu: {
  56. loadtext: "上拉加载更多",
  57. list: [
  58. // 文字
  59. {
  60. userpic: "../../static/demo/userpic/12.jpg",
  61. username: "哈哈",
  62. sex: 0, //0 男 1 女
  63. age: 25,
  64. isguanzhu: false,
  65. title: "我是标题",
  66. titlepic: "",
  67. video: false,
  68. share: false,
  69. path: "深圳 龙岗",
  70. sharenum: 20,
  71. commentnum: 30,
  72. goodnum: 20
  73. },
  74. // 图文
  75. {
  76. userpic: "../../static/demo/userpic/12.jpg",
  77. username: "哈哈",
  78. sex: 0, //0 男 1 女
  79. age: 25,
  80. isguanzhu: false,
  81. title: "我是标题",
  82. titlepic: "../../static/demo/datapic/13.jpg",
  83. video: false,
  84. share: false,
  85. path: "深圳 龙岗",
  86. sharenum: 20,
  87. commentnum: 30,
  88. goodnum: 20
  89. },
  90. // 视频
  91. {
  92. userpic: "../../static/demo/userpic/12.jpg",
  93. username: "哈哈",
  94. sex: 0, //0 男 1 女
  95. age: 25,
  96. isguanzhu: false,
  97. title: "我是标题",
  98. titlepic: "../../static/demo/datapic/13.jpg",
  99. video: {
  100. looknum: "20w",
  101. long: "2:47"
  102. },
  103. share: false,
  104. path: "深圳 龙岗",
  105. sharenum: 20,
  106. commentnum: 30,
  107. goodnum: 20
  108. },
  109. // 分享
  110. {
  111. userpic: "../../static/demo/userpic/12.jpg",
  112. username: "哈哈",
  113. sex: 0, //0 男 1 女
  114. age: 25,
  115. isguanzhu: false,
  116. title: "我是标题",
  117. titlepic: "",
  118. video: false,
  119. share: {
  120. title: "我是分享的标题",
  121. titlepic: "../../static/demo/datapic/14.jpg"
  122. },
  123. path: "深圳 龙岗",
  124. sharenum: 20,
  125. commentnum: 30,
  126. goodnum: 20
  127. },
  128. ]
  129. }
  130. }
  131. },
  132. onLoad() {
  133. uni.getSystemInfo({
  134. success: (res) => {
  135. console.log('当前window高度和窗口高度');
  136. console.log(res.windowHeight);
  137. console.log(res.screenHeight);
  138. let height = res.windowHeight - uni.upx2px(100)
  139. this.swiperheight = height;
  140. }
  141. });
  142. },
  143. methods: {
  144. scroll(e){
  145. // console.log('scroll事件',e);
  146. this.scrollTopValue=e.detail.scrollTop;
  147. },
  148. // 点击切换
  149. changeTab(index) {
  150. console.log('父页面点击:', index);
  151. this.tabIndex = index;
  152. },
  153. // 滑动事件
  154. tabChange(e) {
  155. this.tabIndex = e.details.current
  156. },
  157. // 上拉加载
  158. loadmore() {
  159. if (this.guanzhu.loadtext != "上拉加载更多") {
  160. return;
  161. }
  162. // 修改状态
  163. this.guanzhu.loadtext = "加载中...";
  164. // 获取数据
  165. setTimeout(() => {
  166. //获取完成
  167. let obj = {
  168. userpic: "../../static/demo/userpic/12.jpg",
  169. username: "哈哈",
  170. sex: 0, //0 男 1 女
  171. age: 25,
  172. isguanzhu: false,
  173. title: "我是标题",
  174. titlepic: "../../static/demo/datapic/13.jpg",
  175. video: false,
  176. share: false,
  177. path: "深圳 龙岗",
  178. sharenum: 20,
  179. commentnum: 30,
  180. goodnum: 20
  181. };
  182. this.guanzhu.list.push(obj);
  183. this.guanzhu.loadtext = "上拉加载更多";
  184. }, 1000);
  185. // this.guanzhu.loadtext="没有更多数据了";
  186. }
  187. }
  188. }
  189. </script>
  190. <style>
  191. </style>

结束