1. ホーム
  2. reactjs

[解決済み] SVGサークル内の画像にボーダーを追加する方法

2022-02-07 02:54:49

質問

GSAPを使って円の周りにストロークをアニメートしています。以下は コードペン .

外側のピンクと内側の円形の画像(であるべきもの)の間に、このように間隔を空けたいのです。

以下は私のSVGコードです。

      <svg id='svg1' width='48' height='48' viewBox='0 0 48 48'>
        <defs>
          <clipPath id='circleView'>
            <circle cx='24' cy='24' r='22' fill='none' stroke='#FF62E1' strokeWidth='2' />
          </clipPath>
        </defs>
        <image
          width='100%'
          height='100%'
          xlinkHref={'https://source.unsplash.com/random'}
          clipPath='url(#circleView)'
          />
        <circle
          cx='24'
          cy='24'
          r='22'
          fill='none'
          stroke='#FF62E1'
          strokeWidth='2'
          strokeDasharray='100.48'
          strokeDashoffset='100.48'
          // @ts-ignore
          ref={(circle) => { this.circle = circle }} >
          >
        </circle>
      </svg>

で遊んだことがあります。 filter を使用したり、複数の円を使用して効果を得ることができますが、効果はありません。

これを実現するためのアイデアがあれば教えてください。

どのように解決するのですか?

クリップパスの円の半径を他の円より少し小さくして、正方形の画像を使用すると、ぴったり合うと思います。

render() {
  return (
    <svg id='svg1'  viewBox='0 0 48 48'>
      <defs>
        <clipPath id='circleView'>
          <circle cx='24' cy='24' r='18' fill='none' stroke='#FF62E1' strokeWidth='2' />
        </clipPath>
      </defs>
      <image
        x="0"
        y="0"
        width='48'
        height='48'
        xlinkHref={'https://source.unsplash.com/random/1500x1500/'}
        clipPath='url(#circleView)'
      />
      <circle
        cx='24'
        cy='24'
        r='22'
        fill='none'
        stroke='#FF62E1'
        strokeWidth='2'
        // @ts-ignore
        ref={(circle) => { this.circle = circle }} >
      </circle>
    </svg>
    )
  }
}

コードペン

このオプションは、背景が見える透明な隙間を残すので、正確にあなたが望むものであるかどうかはわかりません。別の方法として、ストロークとフィルがない円を別の半径で再度作成することもできます。

代替コードペン