[文章]HarmonyOS应用开发-三方组件太极图案例

阅读量0
0
0
1.png

主代码页,示例代码:
  1. /*index.nml*/
  2. <div class="container">
  3.     <div class="canvas-container">
  4.         <canvas ref="ref_canvas" class="canvas" id="canvasId"/>
  5.     </div>

  6. </div>

  7. /*index.css*/
  8. .container {
  9.     flex-direction: column;
  10.     justify-content: center;
  11.     align-items: center;
  12.     height: 100%;
  13. /*    background-color: #5e7c85;*/
  14. }

  15. .canvas-container {
  16.     flex-direction: column;
  17.     justify-content: center;
  18.     align-items: center;
  19.     height: 100%;
  20.     width: 100%;
  21. }

  22. .canvas {
  23.     width: 340px;
  24.     height: 340px;
  25.     justify-content: center;
  26.     align-items: center;
  27.     align-content: center;
  28.     margin-left: 10px;
  29.     margin-right: 10px;
  30. }

  31. @keyframes rotateAnim {
  32.     from {
  33.         transform: rotate(0deg);
  34.     }
  35.     to {
  36.         transform: rotate(360deg);
  37.     }
  38. }

  39. #canvasId {
  40.     animation: rotateAnim 5s 0s linear infinite;
  41. }

  42. /*index.js*/
  43. export default {
  44.     data: {},
  45.     onShow() {
  46.         this.draw(170, 170);
  47.     },
  48.     draw(x, y) {
  49.         const el = this.$refs.ref_canvas;
  50.         var ctx = el.getContext('2d', {
  51.             antialias: true
  52.         });

  53.         //半径
  54.         let radius = 150;
  55.         ctx.beginPath();
  56.         ctx.arc(x, y, radius, 0, 2 * Math.PI, false);
  57.         ctx.stroke();
  58.         ctx.fillStyle = 'black';
  59.         ctx.beginPath();
  60.         ctx.moveTo(x, y - radius);
  61.         ctx.bezierCurveTo(x - radius, y - radius / 2, x + radius, y + radius / 2, x, y + radius);
  62.         ctx.arc(x, y, radius, -(Math.PI / 180) * 270, (Math.PI / 180) * 270, true);
  63.         ctx.closePath();
  64.         ctx.fill();
  65.         ctx.beginPath();
  66.         ctx.arc(x, y + radius / 2, 20, 0, 2 * Math.PI, false);
  67.         ctx.fill();
  68.         ctx.fillStyle = 'white';
  69.         ctx.beginPath();
  70.         ctx.arc(x, y + -radius / 2, 20, 0, 2 * Math.PI, false);
  71.         ctx.fill();
  72.     }
  73. }
复制代码

案例效果:
附件:


回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友