找回密码
 立即注册
搜索
查看: 308|回复: 0

微信小程序怎样在加载可视区域的内容的时候,发送当前可视区域的内容作为参数去向PHP

[复制链接]

581

主题

110

回帖

4066

积分

管理员

积分
4066

众神之神

发表于 2025-1-14 21:13:41 | 显示全部楼层 |阅读模式
Q:微信小程序怎样在加载可视区域的内容的时候,发送当前可视区域的内容作为参数去向PHP后端发送异步请求?

  1. Page({
  2.   data: {
  3.     list: [], // 列表数据
  4.     loading: false, // 是否正在加载
  5.     page: 1 // 当前页码
  6.   },

  7.   onLoad() {
  8.     // 初始加载
  9.     this.loadData()
  10.   },

  11.   // 监听页面滚动
  12.   onPageScroll(e) {
  13.     // 获取可视区域信息
  14.     wx.createIntersectionObserver().relativeToViewport().observe('.item', (res) => {
  15.       if (res.intersectionRatio > 0) { // 元素进入可视区域
  16.         // 获取当前元素的数据
  17.         const dataset = res.dataset
  18.         // 发送请求
  19.         this.loadItemData(dataset)
  20.       }
  21.     })
  22.   },

  23.   // 加载列表数据
  24.   loadData() {
  25.     if (this.data.loading) return
  26.    
  27.     this.setData({ loading: true })
  28.    
  29.     wx.request({
  30.       url: 'your_api_url',
  31.       data: {
  32.         page: this.data.page
  33.       },
  34.       success: (res) => {
  35.         this.setData({
  36.           list: [...this.data.list, ...res.data],
  37.           page: this.data.page + 1
  38.         })
  39.       },
  40.       complete: () => {
  41.         this.setData({ loading: false })
  42.       }
  43.     })
  44.   },

  45.   // 加载单个元素详细数据
  46.   loadItemData(params) {
  47.     wx.request({
  48.       url: 'your_detail_api',
  49.       data: params,
  50.       success: (res) => {
  51.         // 处理返回数据
  52.       }
  53.     })
  54.   }
  55. })
复制代码
  1. <view class="container">
  2.   <view
  3.     wx:for="{{list}}"
  4.     wx:key="id"
  5.     class="item"
  6.     data-id="{{item.id}}"
  7.     data-type="{{item.type}}"
  8.   >
  9.     <!-- 列表项内容 -->
  10.   </view>
  11.   
  12.   <!-- 加载提示 -->
  13.   <view class="loading" wx:if="{{loading}}">加载中...</view>
  14. </view>
复制代码



主要实现要点:
1.使用 createIntersectionObserver() 创建交叉观察器:
  • 监听元素是否进入可视区域
  • 可以设置触发阈值和观察的视口范围

2.数据加载控制:
  • 使用 loading 状态防止重复请求
  • 分页加载数据
  • 可以使用节流函数控制请求频率

3.优化建议:


  1. 3. 优化建议:
  2. ```javascript
  3. // 添加节流函数
  4. function throttle(fn, delay = 500) {
  5.   let timer = null
  6.   return function(...args) {
  7.     if (timer) return
  8.     timer = setTimeout(() => {
  9.       fn.apply(this, args)
  10.       timer = null
  11.     }, delay)
  12.   }
  13. }

  14. // 使用节流优化滚动监听
  15. onPageScroll: throttle(function(e) {
  16.   // 滚动处理逻辑
  17. })
  18. ```
复制代码
4. PHP 后端示例:
  1. <?php
  2. // 接收前端参数
  3. $visibleArea = $_POST['visible_area'];
  4. $page = $_POST['page'];

  5. // 处理数据
  6. $result = [
  7.     'list' => [], // 查询数据
  8.     'total' => 0,
  9.     'page' => $page
  10. ];

  11. // 返回 JSON
  12. echo json_encode($result);
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|十三博客 ( 鲁ICP备2023000528号 )

GMT+8, 2026-6-1 18:15 , Processed in 0.050655 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表