实现一个扇形的几种方法
今天晚上面试被问到用canvas实现一个扇形,现在就来总结一下前端实现一个扇形的几种方式
源文件地址:实现一个扇形
代码实现
方法1. border-radius
HTML
  <div class="sector1"></div>
CSS
  width: 50px;
  height: 50px;
  border-bottom-right-radius: 50px;
  background-color: #110099;
方法2. canvas + arc
HTML
  <canvas id="sector2" width='200' height='100'></canvas>
JS
  const drawSector = function () {
    const ctx = document.querySelector('#sector2').getContext('2d');
    ctx.moveTo(50, 50);
    ctx.arc(50, 50, 50, 0, 90 * Math.PI / 180);
    ctx.lineTo(50, 50);
    ctx.stroke();
  }
  drawSector();
方法3. svg+path
HTML
  <svg width='200' height='100'>
    <path xmlns="http://www.w3.org/2000/svg" fill="#110099" 
    d="M 50 50 
    A 50 50 90 0 0 50 -50 
    L 50 50  
    Z" />
  </svg>
效果展示

深入研究
- 自定义角度、自定义半径、自定义起始坐标等,封装一个组件,通过传递一个角度画出对应角度的扇形
- 页面没什么效果,我想加点动画,比如刚进入页面的时候来一段绘制动画,参考echarts
- 加入交互,鼠标悬浮,点击的回调函数透出
- 容错处理、异常处理等,局部错误不会阻塞整体绘制
- 可以做到可视化建图吗?实现思路
- 比较svg和canvas实现成本与体验效果
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号