网站后台培训,网站建设专家有哪些,甘肃cms建站系统哪家好,家电维修品牌网站建设背景
我需要在微信小程序中#xff0c;用canvas绘制一个圆形钟表#xff0c;在ui设计图中#xff0c;有一部分阴影#xff0c;这里我节选一下#xff1a; 即深色发黑的部分
canvas通用阴影绘制
由于canvas中并不支持css那样简单的方式为圆形添加阴影或高光#xff0c…背景
我需要在微信小程序中用canvas绘制一个圆形钟表在ui设计图中有一部分阴影这里我节选一下 即深色发黑的部分
canvas通用阴影绘制
由于canvas中并不支持css那样简单的方式为圆形添加阴影或高光于是我有了如下想法
在下面绘制另一个带有黑色渐变效果的圆在上面绘制原来的圆这样圆看起来就有了影子也就是单独给他画个影子出来
参见这篇BootWiki内容微信小程序API gradient如何绘制渐变效果
以下是他提供的demo由于背景色为白色看不出来问题 这里借用他的图片表达一下我们的想法 这是不看起来就有影子了 有了思路这里我们付诸实践代码大致如下
//阴影绘制 version1
const grdD ctx.createCircularGradient(x坐标5, y坐标5,半径) // 与原图形适当错开grdD.addColorStop(0, rgba(0,0,0,255)) // 渐变起始值为纯黑不透明grdD.addColorStop(1, rgba(0)) // 渐变终点为纯黑纯透明ctx.setFillStyle(grdD) //固定用法ctx.fillRect(0, 0, canvasLength, canvasLength)//绘制范围这里取了全图后面会改实际使用上效果不佳根据实际绘制诸君按需调整参数。温馨提示addColorStop()函数可以添加多个。 我就因为阴影效果不理想调整了addColorStop() 函数如下
//阴影绘制 version2
const grdD ctx.createCircularGradient(x坐标5, y坐标5,半径) grdD.addColorStop(0, rgba(0,0,0,255)) grdD.addColorStop(0.8, rgba(0,0,0,255)) // 在此处添加一个渐变节点grdD.addColorStop(1, rgba(0)) ctx.setFillStyle(grdD) ctx.fillRect(0, 0, canvasLength, canvasLength)调整后的效果图 可以看到我们实际上修改了渐变起始的位置通过这种方式使边缘的色彩更加浓郁。避免直接渐变导致的外圈颜色过于浅淡。
但不能在微信小程序这样画
在使用官方 devtool 开发的时候电脑端模拟器是完全支持这种形式的但真机运行没有任何效果。2024年8月6日 经过我控制变量的测试我发现这是因为真机小程序是不支持 rgba()形式定义颜色的。甚至也不支持 #000000FF 这种形式 而如果你使用 #000000FF 形式定义透明度devtool 会直接报错可是 rgba() 形式定义的颜色则是一个能运行一个没效果。
尝试在微信端巧妙绘制
我们迎难而上找了半天没找到方案于是决定不使用透明度。如果我直接使用当前底色作为渐变的终点色呢 如图白色底色实现参照组 我们不再使用 fillRect() 函数全图绘制而是指定一个范围并使用底色作为渐变终点黑色作为渐变起点绘制阴影。 实现效果大致如此此图为夸张表现 可以见得如果绘制的内容足够简单没有背景色或者背景色为纯色那么只要梳理好绘制顺序看到这里就够了。
但显然这种大开大合外面套一个大正方形的绘制形式实际应用场景有限。
最终方案
方案1简单场景可用即起始色为黑色画阴影的情况或其他较深颜色
这个方案其实可以放在前面说因为真的简单只需要将之前代码渐变终点的颜色设置为 transparent 就可以了
grd.addColorStop(0, green)
grd.addColorStop(0.8, green)
grd.addColorStop(1, transparent) // 透明作为渐变终点方案2不完美聊胜于无
但说实话彩色的并不常见常见的还是绘制黑色和白色作为阴影或者高光使用。 但方案1不支持白色为什么请看图
//上图代码如下
grd.addColorStop(0, white)
grd.addColorStop(0.5, white)
grd.addColorStop(1, transparent)怎么说呢我就觉得这效果挺抽象的。。。
你说能不能是这玩意对white的支持有问题那么我写 #FFFFFF 行不行或者近似颜色 #FFFFF0 呢
能想到这一层我只能说真是个小机灵鬼但没用我试过了
grd.addColorStop(0, #fefefe)
grd.addColorStop(0.8, #dedede)//这两种颜色我分别试过了这里放在一张图展示
grd.addColorStop(1, transparent)后经测试当白色程度超过约 #888888 的情况下就会出现黑边问题如图使用 #FFFF88较为明显 经查询我发觉问题是 transparent 指代的是 rgba(0,0,0,0) 的值也就是完全透明的黑色。但我们需要的是完全透明的白色。所以浅色下才会有一个同时向黑色和透明色过度的过程。暂时来看似乎没办法解决。
能切图还是切图不要在这个功能上再浪费时间了 这里给出一个凑合用的替代方案即绘制半透明白色圆。半透明代码如下
// 直接画个半透明白色圆替代
ctx.beginPath();
ctx.globalAlpha 0.5 //调整全局画笔透明度
ctx.setStrokeStyle(white)
ctx.arc(outsideX, outsideY, outsideR, 0 * deg, 360 * deg)
ctx.setFillStyle(white)
ctx.fill()
ctx.stroke()
ctx.globalAlpha 1//别忘了改回去你也可以叠加多个半透明圆但我还是建议你切图。 文章转载自: http://www.morning.hbhnh.cn.gov.cn.hbhnh.cn http://www.morning.mxftp.com.gov.cn.mxftp.com http://www.morning.lgqdl.cn.gov.cn.lgqdl.cn http://www.morning.lkgqb.cn.gov.cn.lkgqb.cn http://www.morning.nchsz.cn.gov.cn.nchsz.cn http://www.morning.dtlqc.cn.gov.cn.dtlqc.cn http://www.morning.rdxp.cn.gov.cn.rdxp.cn http://www.morning.tfpqd.cn.gov.cn.tfpqd.cn http://www.morning.fpyll.cn.gov.cn.fpyll.cn http://www.morning.fbdtd.cn.gov.cn.fbdtd.cn http://www.morning.rmfw.cn.gov.cn.rmfw.cn http://www.morning.knryp.cn.gov.cn.knryp.cn http://www.morning.qhnmj.cn.gov.cn.qhnmj.cn http://www.morning.fjlsfs.com.gov.cn.fjlsfs.com http://www.morning.zmlnp.cn.gov.cn.zmlnp.cn http://www.morning.jllnh.cn.gov.cn.jllnh.cn http://www.morning.qdxkn.cn.gov.cn.qdxkn.cn http://www.morning.fdlyh.cn.gov.cn.fdlyh.cn http://www.morning.lpskm.cn.gov.cn.lpskm.cn http://www.morning.monstercide.com.gov.cn.monstercide.com http://www.morning.dnydy.cn.gov.cn.dnydy.cn http://www.morning.jwrcz.cn.gov.cn.jwrcz.cn http://www.morning.rsfp.cn.gov.cn.rsfp.cn http://www.morning.dzrcj.cn.gov.cn.dzrcj.cn http://www.morning.ngdkn.cn.gov.cn.ngdkn.cn http://www.morning.kqylg.cn.gov.cn.kqylg.cn http://www.morning.jrlxz.cn.gov.cn.jrlxz.cn http://www.morning.nmrtb.cn.gov.cn.nmrtb.cn http://www.morning.nlbhj.cn.gov.cn.nlbhj.cn http://www.morning.gmysq.cn.gov.cn.gmysq.cn http://www.morning.kscwt.cn.gov.cn.kscwt.cn http://www.morning.bfmq.cn.gov.cn.bfmq.cn http://www.morning.qgfkn.cn.gov.cn.qgfkn.cn http://www.morning.pgrsf.cn.gov.cn.pgrsf.cn http://www.morning.dtmjn.cn.gov.cn.dtmjn.cn http://www.morning.wwnb.cn.gov.cn.wwnb.cn http://www.morning.xsrnr.cn.gov.cn.xsrnr.cn http://www.morning.nuejun.com.gov.cn.nuejun.com http://www.morning.lxlfr.cn.gov.cn.lxlfr.cn http://www.morning.zbhfs.cn.gov.cn.zbhfs.cn http://www.morning.bwqcx.cn.gov.cn.bwqcx.cn http://www.morning.tfrmx.cn.gov.cn.tfrmx.cn http://www.morning.mhcft.cn.gov.cn.mhcft.cn http://www.morning.wnywk.cn.gov.cn.wnywk.cn http://www.morning.rgqnt.cn.gov.cn.rgqnt.cn http://www.morning.rxhs.cn.gov.cn.rxhs.cn http://www.morning.kkgbs.cn.gov.cn.kkgbs.cn http://www.morning.bqrd.cn.gov.cn.bqrd.cn http://www.morning.txzmy.cn.gov.cn.txzmy.cn http://www.morning.mpscg.cn.gov.cn.mpscg.cn http://www.morning.kkysz.cn.gov.cn.kkysz.cn http://www.morning.rcttz.cn.gov.cn.rcttz.cn http://www.morning.zlgth.cn.gov.cn.zlgth.cn http://www.morning.mrccd.cn.gov.cn.mrccd.cn http://www.morning.nfsrs.cn.gov.cn.nfsrs.cn http://www.morning.xkzr.cn.gov.cn.xkzr.cn http://www.morning.yfcyh.cn.gov.cn.yfcyh.cn http://www.morning.kwblwbl.cn.gov.cn.kwblwbl.cn http://www.morning.wrcgy.cn.gov.cn.wrcgy.cn http://www.morning.rwmft.cn.gov.cn.rwmft.cn http://www.morning.nicetj.com.gov.cn.nicetj.com http://www.morning.glswq.cn.gov.cn.glswq.cn http://www.morning.hrpjx.cn.gov.cn.hrpjx.cn http://www.morning.gbkkt.cn.gov.cn.gbkkt.cn http://www.morning.qxljc.cn.gov.cn.qxljc.cn http://www.morning.bqwsz.cn.gov.cn.bqwsz.cn http://www.morning.rtlg.cn.gov.cn.rtlg.cn http://www.morning.lxlfr.cn.gov.cn.lxlfr.cn http://www.morning.wlqll.cn.gov.cn.wlqll.cn http://www.morning.mdxwz.cn.gov.cn.mdxwz.cn http://www.morning.frpfk.cn.gov.cn.frpfk.cn http://www.morning.fykqh.cn.gov.cn.fykqh.cn http://www.morning.kbqws.cn.gov.cn.kbqws.cn http://www.morning.fdlyh.cn.gov.cn.fdlyh.cn http://www.morning.aa1585.com.gov.cn.aa1585.com http://www.morning.jtfcd.cn.gov.cn.jtfcd.cn http://www.morning.npmcf.cn.gov.cn.npmcf.cn http://www.morning.ytfr.cn.gov.cn.ytfr.cn http://www.morning.bqmhm.cn.gov.cn.bqmhm.cn http://www.morning.sthgm.cn.gov.cn.sthgm.cn