ホームページ >ウェブフロントエンド >CSSチュートリアル >クリップは CSS3 でリングプログレスバーを実装します

クリップは CSS3 でリングプログレスバーを実装します

小云云
小云云オリジナル
2018-02-09 11:14:532652ブラウズ

この記事では、リングプログレスバーを実装するCSS3クリップのサンプルコードに関する情報を中心に紹介します。編集者が非常に優れていると考えたので、参考として共有します。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。

CSSにはクリップというプロパティがあります。これはトリミングを意味します。

clip 属性は、絶対的に配置された要素をクリップします。このプロパティは、クリッピング四角形を定義するために使用されます。絶対的に定義された要素の場合、四角形内のコンテンツのみが表示されます。このクリッピング領域外のコンテンツは、オーバーフローの値に従って処理されます。

リングプログレスバー.gif

このようなリングプログレスバーの効果を実現するには、canvas、svg、GIFなどを使用できます。今日は、それを実現するためにcss3を使用する方法について説明します。

実装アイデア

サークルは非常に単純です。 cssborder-radius:50% の 1 行で実装できます。互換性の問題はありません。IE をそのまま動かしてください...

必要です。ここに 3 つの円がリング、全体が 1 つ、半分が 2 つです。下の絵をざっくり描いてみました

ここではクリップを使って半円を切り取っています


.left{
    width: 200px;
    height: 200px;
    border-radius: 50%;
    border: 10px solid lightblue;
    position:absolute;
    top: -10px;   /* 10的原因是因为边框是10个像素 */
    right: -10px;
    clip: rect(0 100px 200px 0);  /* 上面为0 右边到100px 下面200px 左边到0 这个区域的我们裁剪出来 */ 
}

右側は切り取る位置が変わっている以外は同様です


.right{
    width: 200px;
    height: 200px;
    border-radius: 50%;
    border: 10px solid lightblue;
    position:absolute;
    top: -10px;  /* 10的原因是因为边框是10个像素 */
    right: -10px;
    clip: rect(0 200px 200px 100px);  /* 位置更改,计算可以参考上图 */ 
}

完全なコード


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        p{
            box-sizing: border-box;
        }
        .box{
            width: 200px;
            height: 200px;
            position: relative;
            background-color: #ccc;
            border-radius: 50%;
            left: 40%;
            top: 200px;

        }
        .num{
            position: absolute;
            top: 50%;
            left: 50%;
            background: #fff;
            border-radius: 50%;
            width: 180px; 
            height: 180px;
            transform: translate(-50%, -50%);
            text-align: center;
            line-height: 180px;
            font-size: 32px;
        }
        
        
        .clip{
            width: 200px;
            height: 200px;
            position: absolute;
            border: 10px solid #ccc;
            border-radius: 50%;
            clip: rect(0, 200px, 200px, 100px);
        }
        .left{
            width: 200px;
            height: 200px;
            position: absolute;
            border: 10px solid lightblue;
            border-radius: 50%;
            clip: rect(0 100px 200px 0);
            top: -10px;
            left: -10px;
        }
        .right{
            width: 200px;
            height: 200px;
            position: absolute;
            border: 10px solid lightblue;
            border-radius: 50%;
            clip: rect(0 200px 200px 100px);
            top: -10px;
            left: -10px;
        }
        .width-none{
            width: 0;
        }
        .auto{
            clip: auto;
        }
    </style>
</head>
<body>
    <p class="box">
        <p class="clip">
            <p class="left"></p>
            <p class="right width-none"></p>
        </p>
        <p class="num">

        </p>
    </p>
    <script >
        let clip = document.querySelector(&#39;.clip&#39;),
        left = document.querySelector(&#39;.left&#39;),
        right = document.querySelector(&#39;.right&#39;),
        num = document.querySelector(&#39;.num&#39;),
        rotate = 0;
    
        let loop = setInterval(() => {
            if(rotate >= 100){
                rotate = 0;
                right.classList.add(&#39;width-none&#39;);
                clip.classList.remove(&#39;auto&#39;);
            } else if(rotate > 50){
                right.classList.remove(&#39;width-none&#39;);
                clip.classList.add(&#39;auto&#39;);
            }
            rotate++;
            left.style.transform = &#39;rotate(&#39;+ 3.6*rotate + &#39;deg)&#39;;
            num.innerHTML = `${rotate}%`
        },100)

    </script>
</body>
</html>

上のコードについて簡単に説明します

まず、回転する必要があるのは左の半円であるためです。半円を押して右の円の位置に移動し、右側を表示します。つまり、回転が 180 度になるまで待ちます。

2. 同時に、切り抜きスタイルがメインの円に追加されていることがわかります。これは、デフォルトでは非表示にすることしかできないためです。右側だけを表示すると左側になりますが、右側は非表示になっていませんか?では、それは何を示しているのでしょうか? 左に回すと、右に曲がる円が見えるからです。少し複雑なので、コードと組み合わせて理解してください

3. 左側が 180 度回転されたら、右側を表示し、ボックス要素のトリミングをデフォルト値に設定する必要があります。 、トリミングがないため、完全な左側と右側が丸く表示されます。

4. 最後に、jsを使って回転角度を制御し、パーセンテージをページに表示します

最後に書きます

上記の説明が理解できない場合は、読まずにそのまま入力してくださいローカルデバッグ中のコードを自分で理解してください。

あまり焦らないでください。コードは最高の言語です。

関連する推奨事項:

リングプログレスバーを実装するための Css3 メソッド

円弧とリングプログレスバーを実装するキャンバスのサンプルメソッドの詳細な説明

CSS クリップを使用してオーディオ再生リングプログレスバーを実装するチュートリアル例

以上がクリップは CSS3 でリングプログレスバーを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。