分享

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

 印度阿三17 2020-04-05
<html>
<style>


.tops{
  width:100px;
  height:100px;
  background:rgba(255,255,0,0.5);

  position:absolute;
  left:0;
  top:0;
  
}
.container{
   width: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赋予了前端更为强大的能力可以剪切显示元素,我们可以利用这一特性实现效果:

来源:https://www./content-4-672951.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多