Jadual Kandungan
? Dari titik pertama di atas, kita dapat melihat bahawa jika data perlu dimasukkan dalam susunan positif, maka situasi
2、大量数据的处理
文档中提到scroll-view加载大批量数据的时候性能较差,但无奈手头上也没有别的办法,只能死马当活马医了" >处理完回弹问题后,就需要考虑如何处理大量数据。由于uni-app官方也在文档中提到scroll-view加载大批量数据的时候性能较差,但无奈手头上也没有别的办法,只能死马当活马医了
3、功能调整
Rumah hujung hadapan web uni-app Mari kita bincangkan tentang pemuatan lungsur turun paparan skrol uniapp

Mari kita bincangkan tentang pemuatan lungsur turun paparan skrol uniapp

Jul 14, 2022 pm 09:07 PM
uni-app

Mari kita bincangkan tentang pemuatan lungsur turun paparan skrol uniapp

Baru-baru ini saya sedang mengusahakan 微信小程序 daripada 直播模块 Fungsi bilik sembang dalam modul dipaparkan dalam bentuk scroll-view 一维数组, dan tidak ada pengoptimuman. , menghasilkan pengalaman pengguna yang agak lemah

Mula-mula simulasi situasi 聊天室 sebelum pengoptimuman

Mari kita bincangkan tentang pemuatan lungsur turun paparan skrol uniapp

Kesakitan boleh dilihat oleh orang bogel eye~

Tetapi pengoptimuman masih perlu dilakukan tanpa pengoptimuman Tetapi sebelum memulakan, saya rasa perlu untuk membahagikan langkah pengoptimuman kepada dua perkara berikut?

1 . Tidak lagi menggunakan untuk menetapkan titik utama scroll-into-view

Memandangkan versi lama dilaksanakan dalam bentuk

, ini menyebabkan halaman sentiasa dipaparkan selepas data ditambah dan bukannya scroll-view 一维数组, jadi pembangun sebelumnya menggunakan atribut 加载后的最后一条信息 sebagai 加载前的最后一条信息 selepas data dimuatkan Namun, memandangkan penukaran scroll-into-view dan 回位锚点 tidak berlaku secara serentak. ini mengakibatkan fenomena 锚点指向数据加载回弹

2 Memproses sejumlah besar data

Oleh kerana ia adalah fungsi , tidak dapat dielakkan untuk memuatkan sejumlah besar perbualan pengguna, gambar, dsb. kandungan, dan kerana

sendiri tidak sesuai untuk memuatkan sejumlah besar data (saya terlalu teruk untuk memikirkan cara lain), jadi saya perlu bekerja keras pada pemuatan dan paparan data

聊天室scroll-view

3. Pemprosesan fungsi tambahan

Bilik sembang pada asalnya mempunyai dan fungsi lain, jadi selepas pengoptimuman selesai, fungsi asal tidak boleh diabaikan

返回底部OK untuk bermula~

1. Invert scroll-view

Mengapa kita perlu menyongsangkan

? Dari titik pertama di atas, kita dapat melihat bahawa jika data perlu dimasukkan dalam susunan positif, maka situasi

pasti akan berlaku, tetapi untuk menyelesaikan situasi ini anda perlu menggunakan atribut

, kemudian jika perlu Untuk sepenuhnya selesaikan masalah ini, kita perlu bermula dari punca masalah scroll-view数据加载后无法显示后面数据scroll-into-viewPertama sekali, kod scroll-view?

修改前

Kemudian mari cuba pertama
<view>这是一个直播画面</view>
  <scroll-view>
    <view>
      {{ item.data }}
    </view>
  </scroll-view>
Salin selepas log masuk
Ia tidak memberi kesan pada akhirnya
const scrollIntoView = ref("index1");
const upper = () => {
  let lastNum = scrollData.value[0].data;
  let newArr = [];
  for (let index = 1; index  {
    scrollIntoView.value = `index${lastNum}`;
    console.log("scrollIntoView  :>>", scrollIntoView.value);
  }, 100);
};
const getRandomColor = () => {
  return "#" + Math.random().toString(16).substr(2, 6);
};
Salin selepas log masuk

Mula-mula kita perlu menggunakan atribut 倒置scroll-view kepada

, dan kemudian gunakan atribut yang sama pada sub-elemen dalaman untuk menyongsangkan

juga, perkara yang paling penting ialah, jika anda mengalih keluar atribut scroll-view pada transform:rotate(180deg), adakah anda akan mendapat kesan ini? 🎜> dan kedudukan 存放数据的数组 pada masa ini Ia berada di sebelah kiri, jika perlu, anda boleh menggunakan atribut scroll-view untuk mengalih keluarnya, atau mensimulasikannya sendiri scroll-into-view

Setakat ini hanya

Langkah seterusnya ialah Mari kita bincangkan tentang pemuatan lungsur turun paparan skrol uniapp .

Pada masa ini 滚动条 kami berada dalam keadaan CSS, yang bermaksud 去除滚动条的CSS样式 (berbelit lidah diketepikan), jadi

yang digunakan sebelum ini mesti diganti dengan
::-webkit-scrollbar {
  display:none;
  width:0;
  height:0;
  color:transparent;
}
Salin selepas log masuk
untuk mencapai matlamat ini. ." Tarik ke bawah untuk memuatkan"

第一步如何下拉加载数据

Berikut ialah yang semasascroll-viewKelihatan jauh lebih baik倒置顶部是底,底部才是顶scrolltoupper触顶方法scrolltolower触底方法

2、大量数据的处理

我第一个想法就是非常经典的虚拟列表,但是此前所看的很多关于虚拟列表的文章都是在web端实现的,似乎小程序领域里并不是一个被经常采用的方法,但是所幸还是找到了如何在微信小程序实现虚拟列表的资料,详情可以查看这篇文章?微信小程序虚拟列表

OK说干就干,那么第一步就是要明确实现虚拟列表需要什么样的数据结构,虚拟列表其实简单地说就是当某一个模块的数据超出了可视范围就将其隐藏,那么如何将数据分为多个模块呢?答案就是二维数组

首先将当前的页码存储起来(默认为0),当触发下拉加载动作时页码+1,然后以当前页码作为下标存入数组

const currentShowPage=ref(0)
const upper = () => {
  let len = scrollData.value[currentShowPage.value].length - 1;
  let lastNum = scrollData.value[currentShowPage.value][len].data;
  let newArr = [];
  currentShowPage.value += 1;
  for (let index = 1; index <p>当然别忘了在页面中也需要以<code>二维数组</code>的形式循环数据</p><pre class="brush:php;toolbar:false"><scroll-view>
    <view>
      <view>
        {{ item.data }}
      </view>
    </view>
  </scroll-view>
Salin selepas log masuk
数据结构的问题解决了,那么接下来就是如何判断数据模块是否超出可视范围

首先我们需要知道每个数据模块的高度,其实很简单,只需要为每个模块定义一个id,然后在数据展示之后根据id获取到该模块的节点信息然后按顺序存储到数组中即可

const pagesHeight = []
onReady(()=>{
    setPageHeight()
})

const upper = () => {
  ...
  nextTick(() => {
    // 每次获取新数据都调用一下
    setPageHeight();
  });
};

const setPageHeight = () => {
  let query = uni.createSelectorQuery();
  query
    .select(`#item-${currentShowPage.value}`)
    .boundingClientRect(res => {
      pagesHeight[currentShowPage.value] = res && res.height;
    })
    .exec();
};
Salin selepas log masuk

OK,现在我们已经知道每个模块的高度了,然后就是监听模块与可视窗口的交叉范围。这里有两种方法,一种是JS获取可视窗口的高度与模块scrollTop进行差值计算,另一种是使用小程序的createIntersectionObserver方法让程序自行监听交叉区域

这里我展示的是第二种方法,如果对第一种方法感兴趣的朋友可以向上看第二章开头我推荐的《微信小程序虚拟列表》文章

关于createIntersectionObserver方法的使用其实很简单,我们只需要把可视窗口的id以及需要监听的模块id传入即可,详情看官方文档

onReady(() => {
  ...
  observer(currentShowPage.value);
});
const upper = () => {
  ...
  nextTick(() => {
    // 每次获取新数据都调用一下
    observer();
  });
};

// 允许渲染的数组下标,需要设置默认值
const visiblePagesList = ref([-1,0,1])
const observer = pageNum => {
  const observeView = wx
    .createIntersectionObserver()
    .relativeTo("#scroll", { top: 0, bottom: 0 });
  observeView.observe(`#item-${pageNum}`, res => {
    if (res.intersectionRatio > 0) visiblePagesList.value = [pageNum - 1, pageNum, pageNum + 1];
  });
};
Salin selepas log masuk

最后就是在页面中判断该模块是否允许被渲染(也就是是否存储在visiblePagesList数组中),这里就很简单了,只需要写一个方法在页面中调用即可

<scroll-view>
    <view>
      <template>
        <view>
          {{ item.data }}
        </view>
      </template>
      <view></view>
    </view>
  </scroll-view>
Salin selepas log masuk
const includePage = index => {
  return visiblePagesList.value.indexOf(index) > -1;
};
Salin selepas log masuk

来看看效果如何

Mari kita bincangkan tentang pemuatan lungsur turun paparan skrol uniapp

额...似乎没有太大区别,那我们看看页面结构到底也没有将可视区域外的内容切换为空白view

Mari kita bincangkan tentang pemuatan lungsur turun paparan skrol uniapp

成功!

3、功能调整

聊天室原本还有回底功能等,也不能忘了加上

这个部分就比较简单了,只需要直接使用scroll-viewscroll-top属性,然后通过在scroll回调中动态记载scroll-top的值即可

下面是部分代码

<scroll-view>
  ...
  </scroll-view>
  <view>回底</view>
Salin selepas log masuk
let scrollTop;
const currentTop = ref(0);
const showGoBottom = ref(false);
const handle_scroll = throttle(event => {
  scrollTop = event[0].detail.scrollTop;
  if (scrollTop > 300) {
    showGoBottom.value = true;
  }
}, 100);
const handle_goBottom = () => {
  currentTop.value = scrollTop;
  nextTick(() => {
    currentTop.value = 0;
  });
  showGoBottom.value = false;
};
Salin selepas log masuk

大功告成~

最后附上demo仓库

https://gitee.com/huang-qihao123/virtual-list-demo

推荐:《uniapp教程

Atas ialah kandungan terperinci Mari kita bincangkan tentang pemuatan lungsur turun paparan skrol uniapp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk membangunkan uni-app dalam VSCode? (Perkongsian tutorial) Bagaimana untuk membangunkan uni-app dalam VSCode? (Perkongsian tutorial) May 13, 2022 pm 08:11 PM

Bagaimana untuk membangunkan uni-app dalam VSCode? Artikel berikut akan berkongsi dengan anda tutorial tentang membangunkan uni-app dalam VSCode Ini mungkin tutorial terbaik dan paling terperinci. Datang dan lihat!

Gunakan uniapp untuk membangunkan navigasi peta yang mudah Gunakan uniapp untuk membangunkan navigasi peta yang mudah Jun 09, 2022 pm 07:46 PM

Bagaimana untuk menggunakan uniapp untuk membangunkan navigasi peta yang mudah? Artikel ini akan memberi anda idea untuk membuat peta mudah saya harap ia akan membantu anda!

Mari kita bincangkan tentang cara menggunakan uniapp untuk membangunkan permainan ular! Mari kita bincangkan tentang cara menggunakan uniapp untuk membangunkan permainan ular! May 20, 2022 pm 07:56 PM

Bagaimana untuk menggunakan uniapp untuk membangunkan permainan ular? Artikel berikut akan membimbing anda langkah demi langkah dalam melaksanakan permainan Snake dalam uniapp. Saya harap ia akan membantu anda!

Bagaimana untuk merangkum permintaan antara muka vue3 uni-app Bagaimana untuk merangkum permintaan antara muka vue3 uni-app May 11, 2023 pm 07:28 PM

antara muka uni-app, enkapsulasi kaedah global 1. Cipta fail api dalam direktori akar, buat fail api.js, baseUrl.js dan http.js dalam folder api 2.baseUrl.js kod fail exportdefault"https://XXXX .test03.qcw800.com/api/"3.http.js kod fail exportfunctionhttps(opts,data){lethttpDefaultOpts={url:opts.url,data:data,method:opts.method

Contoh untuk menerangkan cara uniapp melaksanakan fungsi semua pilihan kotak berbilang pilihan Contoh untuk menerangkan cara uniapp melaksanakan fungsi semua pilihan kotak berbilang pilihan Jun 22, 2022 am 11:57 AM

Artikel ini membawa anda pengetahuan yang berkaitan tentang uniapp, yang terutamanya mengatur isu berkaitan melaksanakan fungsi pilih-semua kotak berbilang pilihan Sebab mengapa ia tidak dapat mencapai fungsi pilih-semua ialah apabila medan yang ditandakan pada kotak pilihan adalah diubah suai secara dinamik, status pada antara muka boleh berubah masa nyata, tetapi acara perubahan kumpulan kotak semak tidak boleh dicetuskan. Saya harap ia akan membantu semua orang.

Membawa anda langkah demi langkah untuk membangunkan pemalam kalendar uni-apl (dan menerbitkannya) Membawa anda langkah demi langkah untuk membangunkan pemalam kalendar uni-apl (dan menerbitkannya) Jun 30, 2022 pm 08:13 PM

Artikel ini akan membimbing anda langkah demi langkah dalam membangunkan pemalam kalendar uni-apl dan memperkenalkan cara pemalam kalendar seterusnya dibangunkan dari pembangunan hingga keluaran saya harap ia akan membantu anda!

Mari kita bincangkan tentang pemuatan lungsur turun paparan skrol uniapp Mari kita bincangkan tentang pemuatan lungsur turun paparan skrol uniapp Jul 14, 2022 pm 09:07 PM

Bagaimanakah uniapp melaksanakan pemuatan lungsur turun paparan skrol? Artikel berikut bercakap tentang pemuatan lungsur turun applet WeChat scroll-view Saya harap ia akan membantu semua orang.

Contoh terperinci tentang cara uniapp melaksanakan fungsi rakaman telefon (dengan kod) Contoh terperinci tentang cara uniapp melaksanakan fungsi rakaman telefon (dengan kod) Jan 05, 2023 pm 04:41 PM

Artikel ini membawakan anda pengetahuan yang berkaitan tentang uniapp terutamanya cara menggunakan uniapp untuk membuat panggilan dan menyegerakkan rakaman. Saya harap ia dapat membantu semua orang.

See all articles