useMessageImageLoad.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import {nextTick, ref} from "vue"
  2. import type Message from "@/mode/Message";
  3. import MessageType from "@/utils/MessageType";
  4. import MessageApi from "@/api/MessageApi";
  5. import type User from "@/mode/User";
  6. import type Chat from "@/mode/Chat";
  7. import {useChatStore} from "@/store/chatStore";
  8. const last = ref('m-0');
  9. //每页显示多少条数据
  10. const pageSize = ref(20)
  11. //页码
  12. const pageNum = ref(1)
  13. /**
  14. * 加载图片,确保加载完成,消息滚动到最后。
  15. */
  16. const preloadImages = (arr: any) => {
  17. let loadedImage = 0
  18. return new Promise((resolve, reject) => {
  19. if (arr.length > 0) {
  20. for (let i = 0; i < arr.length; i++) {
  21. uni.getImageInfo({
  22. src: arr[i],
  23. success() {
  24. loadedImage++
  25. if (loadedImage === arr.length) {
  26. resolve(0)
  27. }
  28. },
  29. fail() {
  30. reject()
  31. }
  32. })
  33. }
  34. } else {
  35. resolve(0)
  36. }
  37. })
  38. }
  39. /**
  40. * 加载图片,确保加载完成,消息滚动到最后。
  41. */
  42. const imageLoad = (messageList:Array<Message>) => {
  43. let srcArr: string[] = []
  44. if (messageList) {
  45. messageList.forEach((item) => {
  46. if (item.messageType === MessageType.image && item.extend && item.extend.url) {
  47. srcArr.push(item.extend.url)
  48. }
  49. })
  50. }
  51. preloadImages(srcArr).finally(()=>{
  52. toBottom()
  53. })
  54. }
  55. /**
  56. * 聊天记录滚动到最下面
  57. */
  58. const toBottom = () => {
  59. last.value = ''
  60. nextTick().then(r =>{
  61. last.value = 'm-last'
  62. })
  63. }
  64. export {last, imageLoad,toBottom}