svg / d3.js rounded corner on one corner of a rectangle

后端 未结 5 1250
青春惊慌失措
青春惊慌失措 2020-12-01 04:41

I know svg has an in built function to do rounded corners, but I need to do rounded corners on only 2 of the four corners.

I know I can draw multiple rectangles on t

5条回答
  •  粉色の甜心
    2020-12-01 05:03

    Anyone who looks for an Eslinted version of stackmate -s answer:

    function roundedRect(x, y, w, h, r, tl, tr, bl, br) {
      let retval;
      retval = `M${x + r},${y}`;
      retval += `h${w - (2 * r)}`;
      if (tr) {
        retval += `a${r},${r} 0 0 1 ${r},${r}`;
      } else {
        retval += `h${r}`; retval += `v${r}`;
      }
      retval += `v${h - (2 * r)}`;
      if (br) {
        retval += `a${r},${r} 0 0 1 ${-r},${r}`;
      } else {
        retval += `v${r}`; retval += `h${-r}`;
      }
      retval += `h${(2 * r) - w}`;
      if (bl) {
        retval += `a${r},${r} 0 0 1 ${-r},${-r}`;
      } else {
        retval += `h${-r}`; retval += `v${-r}`;
      }
      retval += `v${((2 * r) - h)}`;
      if (tl) {
        retval += `a${r},${r} 0 0 1 ${r},${-r}`;
      } else {
        retval += `v${-r}`; retval += `h${r}`;
      }
      retval += 'z';
      return retval;
    }
    

提交回复
热议问题