用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

531

主题

910

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12309
2019-11-13 16:43:38 Rolan 管理员 楼主 0766
小程序没有提供color-picker类似的组件,只能自己做。可传统的RGB颜色选择器,真的腻了,而且在手机上也不是很操作,就跑网上搜了一圈,发现有一种圆环形的(基于HSV)我很喜欢:
纯canvas版本
这个版本做了整整一天!
由于canvas绘制性能问题,特别是因为没有requestAnimationFrame可以调用,别说在真机上测试特别不流畅,就是在模拟器上也小卡小卡的。而且,在纯的canvas进行触摸定位等事件响应处理,计算起来太麻烦,bug不断,只能放弃了。

混合版本
因为wxs模块是提供requestAnimationFrame接口的,所以我就想,使用canvas作为底部颜色环,上面就直接用view作为指针,这样,事件触发和处理比起纯canvas要简单得多,而且还能利用rAF回调页面接口去绘制其他canvas。
的确,我的想法得到了证实,这个混合版本比起第一个要流畅得多!
可就要完工的时候,我却发现,在真机上,cover-view的鼠标事件有很大问题,坐标值飘忽不定,也就是说拖动指针会发生鬼畜般的抖动!加上我不知道怎么debug到wxs模块中,于是跟个sb一样fix,找了半天也没找到问题在哪儿,直到我搜索时,返现有人也遇到和我一样的问题,我才安心了:这是小程序的问题。
动手改!既然cover-view有不行,那就不用它。
实际上canvas在该组件中的作用无非就是绘制一个圆环而已,如果我利用离屏canvas事先画好,然后保存成图片,再用image加载它,这样就可以避免使用canvas来显示圆环了,也就可以不用cover-view放到其顶部!
想法是好的,可是到了真机上,绘制保存出来的图片时好时坏:


只能放弃,又耽误我一天。

无canvas版本
刚才说了,canvas在该组件中的作用,仅仅是绘制一个颜色环而已,除此之外真没什么用。
那我就用css模拟一个类似圆环就好了,精确到每一度一个颜色一点意义没有。
所以就利用css的background-image属性,做了4个四分之一圆弧,然后拼在一起,得到了一个彩色原版,再用一个小的view遮挡,让它们只露出一部分,圆环就做好了。
之前的代码都不用改,直接用新作的圆环views替换canvas的标签即可。主体框架和功能,不到一天就完成了,不得不说,比起纯的canvas绘制,要方便太多太多。

这是截图:
代码片段
这里是 演示DEMO,要使用的话,复制里面的组件出来用就好。
下载: zasi-components-master.zip (147.9 KB, 下载次数: 2)
有问题请在本站内搜索相应关键词,假如无法解决请在综合交流区内发帖咨询,发帖时请提供详细的问题描述、相关图片及代码。
还可以加QQ交流群咨询:536592077。
发新帖
您需要登录后才可以回帖 登录 | 立即注册