• 利用 clip-path实现旋转加载动画


    <html>
    <style>
    
    
    .tops{
      100px;
      height:100px;
      background:rgba(255,255,0,0.5);
    
      position:absolute;
      left:0;
      top:0;
      
    }
    .container{
       100px;
       height:100px;
       overflow:hidden;
       position:relative;
    }
    </style>
    <body>
    <div class="container">
    <div class="tops"></div>
    
    </div>
    
    </body>
    
    <script>
    let tops = document.getElementsByClassName('tops')[0],
    center = {
        x: 50,
        y: 50
    },
    p1 = {
        x: center.x,
        y: 0
    },
    theta = 0,
    r = 71,
    delta = Math.PI / 180,
    p2 = {},
    p3 = {},
    p4 = {},
    p5 = {},
    p6 = {},
    p7 = {},
    
    timer = setInterval(() => {
    debugger
            if (0 < theta && theta <= 0.25 * Math.PI) {
    		   r = 50/Math.cos(theta);
                p2 = {
                    x: center.x + r * Math.sin(theta),
                    y: 0
                }
                p3 = {
                    x: center.x * 2,
                    y: 0
                }
                p4 = {
                    x: center.x * 2,
                    y: center.y * 2
                }
                p5 = {
                    x: 0,
                    y: center.y * 2
                }
                p6 = {
                    x: 0,
                    y: 0
                }
                p7 = p1
            }
    		
            if (0.25 * Math.PI < theta && theta <= 0.75 * Math.PI) {
    		r = 50/Math.sin(theta);
                p2 = {
                    x: center.x * 2,
                    y: center.y - r * Math.cos(theta)
                }
    
                p3 = {
                    x: center.x * 2,
                    y: center.y * 2
                }
                p4 = {
                    x: 0,
                    y: center.y * 2
                }
                p5 = {
                    x: 0,
                    y: 0
                }
                p6 = p1
                    p7 = {}
    
            }
    
            if (0.75 * Math.PI < theta && theta <= 1.25 * Math.PI) {
    		   r=Math.abs(50/Math.cos(theta))
                p2 = {
                    x: center.x + r * Math.sin(theta),
    
                    y: center.y * 2
                }
    
                p3 = {
                    x: 0,
                    y: center.y * 2
                }
                p4 = {
                    x: 0,
                    y: 0
                }
                p5 = p1
                    p6 = {}
                p7 = {}
    
            }
    
            if (1.25 * Math.PI < theta && theta <= 1.75 * Math.PI) {
    		   r=Math.abs(50/Math.sin(theta))
                p2 = {
                    x: 0,
    
                    y: center.y - r * Math.cos(theta)
                }
    
                p3 = {
                    x: 0,
                    y: 0
                }
                p4 = p1
                    p5 = {}
                p6 = {}
                p7 = {}
    
            }
            if (1.75 * Math.PI < theta && theta <= 2 * Math.PI) {
    		   r=Math.abs(50/Math.cos(theta))
                p2 = {
                    x: center.x + r * Math.sin(theta),
    
                    y: 0
                }
    
                p3 = p1
                    p4 = {}
                p5 = {}
                p6 = {}
                p7 = {}
    
            }
    
            let arrays = [p1, center, p2, p3, p4, p5, p6, p7];
            for (let j = 0; j < arrays.length; j++) {
                if (arrays[j].x === undefined) {
                    arrays.splice(j, 1);
                    j--
                }
    
            }
            let strings = 'polygon(';
            for (let j = 0; j < arrays.length; j++) {
                strings += `${arrays[j].x}% ${arrays[j].y}% ,`
            }
            strings = (strings + ')').replace(',)', ')');
            tops.style.clipPath = strings
                theta += 1*delta;
            if (theta > 2 * Math.PI) {
                clearInterval(timer)
            }
            console.log(strings)
        }, 16.6)
    </script>
    </html>
    

      clip-path赋予了前端更为强大的能力可以剪切显示元素,我们可以利用这一特性实现效果:

  • 相关阅读:
    Error #2044: 未处理的 NetStatusEvent:。 level=error, code=NetConnection.Call.BadVersion。
    Decode amf3 object using PHP
    Papervision3D Proximity Grid Example
    array容易混淆的几个有用的方法
    输出流实际上不写对象的值,而是对象吧自己本身写在流上
    OM Unit Selling Price 与 Price List Setup 不一致
    CoreApiHtml.sql 3< (INVItemCt115h.sql ) Note: 223702.1
    LOT NUMBER / PO / RECEIPT NO Relation.
    CoreApiHtml.sql 2< (INVItemCt115h.sql ) Note: 223702.1
    CoreApiHtml.sql 1< (INVItemCt115h.sql ) Note: 223702.1
  • 原文地址:https://www.cnblogs.com/tony-stark/p/12637583.html
Copyright © 2020-2023  润新知