在微信小游戏中,好友排名数据是能在关系数据域操作,整个关系数据域只会返回一个最终的sharedCanvas,并且这个canvas不能调用toDataURL()方法,所以要展示好友排行榜的话只能在关系数据域中将信息画在sharedCanvas上面。对于排名信息的分页,比较常见的做法是加一个上一页下一页按钮。例如好友数据共有500条,默认为第0页,一页展示10条的话,就将0-9条数据画到排行榜页面上。点击按钮的时候重新设置当前是第几页,再重新绘制10条数据。

  有上一页下一页按钮的分页做法比较简单,容易实现,但是一个页面没来空间就小,还要加上两个按钮,很容易导致一页只能显示五六条数据,这样不停的点击按钮翻页很麻烦。所以如果可以直接一页内滑动查看所有排名信息的话,用户体验会比较好。下面就具体说明一下,怎么实现滑动查看所有排名。

  需要实现的功能:一个canvas区域中部分区域滚动无限加载。

  首先实现逻辑思考:一整个canvas页面大小720*1280,中间一块区域是显示排行信息的,这里假设大小是650*600,要在这个650*600的区域实现滑动查看500条数据,滑动过程这个区域之外的地方canvas内容不变,类似于中间一块区域为一个滚动区域,其他区域不受影响,排名信息渲染在滚动区域中,超出的部分隐藏。

  初步实现打算:设定一个变量baseTop表示滚动了多少px的距离,默认值为0,每条排名信息有个高度itemHeight,每条信息上下有个间距marginTop。这里设置itemHeight为120px,marginTop为10px;遍历排名数据,第i条排名数据的位置为(1280-600)/2 + (10 + 120) * i + baseTop。绘制好排名信息之后,使用context.clearRect(x,y,width,height)方法,执行context.clearRect(0,0,720,(1280-600)/2) 和 context.clearRect(0,(1280+600)/2,720,1280 - (1280+600)/2)将中间650*600区域之外的排名信息擦除,再绘制排名信息之外的内容。再只需要根据滑动事件改变baseTop的值,再重新渲染canvas,就可以实现canvas上部分区域滑动查看更多排名信息了。

  实现过程步骤:根据滚动距离绘制所有排名信息 =》擦除溢出到可滚动区域之外的内容 =》绘制除排名信息之外的内容 =》滑动过程改变滚动距离 =》 回到第一步重新渲染。

  初步实现过程:以egret引擎为例,给排行榜页面添加touchBegin,touchEnd,touchMove事件。定义4个变量rankCanMove,rankTouchId,rankTouching,rankTouchOldPos。分别表示触摸区域是否为滚动区域,触摸事件的id,触摸事件是否正常进行,上一个触摸点的位置。用这4个变量控制多指触摸的话,只有第一个触摸点有效。触摸点只有在需要滚动的区域内才有效。将滑动过程中新的触摸点与旧的触摸点的Y轴移动距离算出来,通过openDataContext.postMessage将移动的Y轴距离传到关系数据域,关系数据域收到信息重新设置baseTop的值,再重新渲染。三个触摸事件的代码如下:

至此基本功能已实现,但是由于在触摸滑动过程不停的重新渲染所有排名数据,再擦除,再渲染排名之外的信息。当排名数据越多时,性能会越差。于是想着,能不能实现类似于懒加载的懒渲染,只渲染需要显示的数据。例如总共1000条排名的话,同时看到的可能只有6条,现在会渲染1000条再擦除,实现目标只渲染需要的6条再擦除超出部分。

需要实现的功能:一个canvas区域中部分区域滚动无限加载的基础上,实现懒渲染。

实现逻辑思考:可以根据baseTop判断需要显示的数据为哪6条和判断这六条的位置应该是怎么样的。只遍历需要的6条数据,在正确的位置渲染。再擦除超出部位,再渲染排名之外的信息。

实现过程步骤:根据滚动距离确定可见的数据是哪几条=》根据滚动距离绘制这几条数据的排名信息 =》擦除溢出到可滚动区域之外的内容 =》绘制除排名信息之外的内容 =》滑动过程改变滚动距离 =》 回到第一步重新渲染。

实现过程:baseTop初始是0,每滑动一条信息就上移(减少)了120px+10px距离。当前要展示的6条数据为所有数据数组arr.slice(0-Math.ceil(baseTop/130),6-Math.ceil(baseTop/130)。因为baseTop小与0,所以用Math.ceil。遍历渲染这六条数据的位置为(1280-600)/2 + baseTop % 130 + i * 130;

到这里就实现了关系数据域整个canvas区域中部分区域滚动无限加载并且懒渲染了。

转载于:https://www.cnblogs.com/eccainiao/p/9396738.html

微信小游戏排行榜页滚动查看排行榜(canvas指定区域溢出滚动,懒渲染)相关推荐

  1. 第一次使用Egret开发微信小游戏经验总结(包括排行榜排序,每周一数据清零,超越好友等处理)

    最近项目组立项了个小游戏,用Egret(白鹭)开发,本来游戏核心功能2天就完成了,后来准备接入微信好友排行榜的时候,用到了子域,加入分享给好友的时候,图片合成后分享给微信好友有时候不能显示出图片内容. ...

  2. 微信小游戏制作大厅里的排行榜(跟游戏内的排行榜有区别)

    微信游戏大厅里的排行榜制作: var kvDataList = new Array(); var tempJson = {wxgame: {score: currentLevel, update_ti ...

  3. CocosCreator微信小游戏开放域使用(排行榜)

    CocosCreator官方文档 微信小程序开放域官方文档 实现步骤: 单独创建一个开放域项目,并设置接收消息方法 const { ccclass, property } = cc._decorato ...

  4. CocosCreator微信小游戏排行榜及开放数据域的理解与使用

    微信小游戏开放数据域及排行榜的使用 好久没有写博客了,距离上一次博客,已经有了近半年之久,这段时间发生了太多的事,当然,这些不是今天的主题,接下来我们主要讲一讲微信小游戏开放数据域的使用,以及如果制作 ...

  5. 基于Laya游戏引擎实现微信小游戏排行榜

    我们都知道,微信小游戏和小程序目前风头十足,很多公司都逐渐增加了相关业务线来迅速推广自己的产品和抢占用户群.说到微信小游戏,就不得不提到排行榜这个功能,就目前游戏行业,似乎都离不开排行榜这个重要功能, ...

  6. egret微信小游戏相关

    文章目录 官方文档 开放数据域 微信登录授权登录,获取微信用户信息,分享小游戏 微信排行榜 微信排行榜数据获取 微信好友排行榜绘制 主域名发送消息,共享域接受消息 其他注意事项 官方文档 微信小游戏快 ...

  7. 在微信小游戏中开发一个贪食蛇

    为什么80%的码农都做不了架构师?>>>    我自己也写过一个贪食蛇的小游戏,不过是对dom的操作,微信小游戏是采用js语法基于canvas的开发.为了省事在网上直接搜了一个基于c ...

  8. 学习微信小游戏(一)

    1.项目目录 1)audio:用于存放音频 2)images:用于存放图片 3)js:用于存放我们编写的js文件 a.symbol.js: b.weapp-adapter.js: 4)game.js: ...

  9. 使用记录11_微信小游戏排行榜

    转载自 https://blog.csdn.net/haibo19981/article/details/80435962 1.安装cocos creator1.9.1 详细情况请看官方"接 ...

最新文章

  1. 传热学c语言节点编程题_哈工大苏小红C语言编程题目第二周的答案第一二题12...
  2. [SDOI2015]约数个数和【莫比乌斯反演】
  3. SQL SERVER全面优化-------写出好语句是习惯
  4. Linux 用qmake快速生成makefile
  5. Serializable:明明就一个空接口!为什么还要实现它?
  6. SecureCRT远程连接Linux服务器及相关配置
  7. 我对架构设计的5点思考:网关、业务逻辑、数据访问
  8. 02.操作系统概述.md
  9. c语言编程安全队列,C语言编程队列的实现
  10. 让 API 端点的响应速度提高 50 倍!
  11. redhat-5.4故障排除
  12. 一个简单的Python自动投票
  13. 哈夫曼树的构造和哈夫曼编码实现详细讲解(含例题详细讲解)
  14. LightOJ1336
  15. 计算机主板扩展槽,计算机内部所有插槽介绍,10分钟读懂电脑主板,高手必备!...
  16. Retina显示屏-揭秘移动端的视觉稿通常会设计为传统PC的2倍
  17. 微信小程序开发者工具无法登录 不显示登录二维码
  18. webworker应用场景_JavaScript 工作原理之七-Web Workers 分类及 5 个使用场景
  19. 初学python制作二维码以及最新感悟
  20. 开源在线excel编辑器_【技能】十个在线小工具,科研amp;工作必备神器!

热门文章

  1. 梳理国外lead项目操作全部流程
  2. 目前计算机服务器主流硬盘,为什么大多数服务器还在用机械硬盘,而不用固态硬盘?...
  3. java 汉字转换为拼音 简码 及全拼音
  4. 脂质体挤出器故障不用慌,了解原因解决问题
  5. 44. TA镜像加载时的验证
  6. sync-player:使用websocket实现异地同步播放视频
  7. 信用卡市场发展洞察:浦大喜奔APP探索大零售融合经营体系
  8. 幼儿园教职员工奖惩办法
  9. 微软 New Bing 和 Edge 动手实践:令人惊讶的 AI 集成度
  10. 软件智能:aaas系统整体设计的内容构成和简单介绍---正文开篇 之 --重说“’得名’的’A字面指称’及其’C字里暗藏’和’B行间隐含’” 之1