多边形实现圆环效果

c's's实现效果图 更直观的可以看图2 

主要思路 利用多边形的特性 吧图片裁成等份的效果 用css属性实现

 

<!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>
</head>
    <style id="style">
        body{
            margin: 0;
            padding: 0;
        }
        #box{
            position: fixed;
            left: 0;
            top: 0;
            perspective: 500;
            width: 100%;
            height: 100%;
            
        }
        #box:hover #div{
            transform: rotateY(360deg)
        }
        #div{
            transform-style: preserve-3d;
            position: absolute;
            left: 50%;
            width: 66px;
            /* transform: rotateX(90deg); */
            transition: 6s;
            height: 585px;
            top: 50%;
            margin-left: -32.25px;
            margin-top: -292.5px;
        }
        #div div{
            left: 0;
            top: 0;
            width: 66px;
            height: 585px;
            position: absolute;
            background-size: cover;
            /* backface-visibility: hidden; */
            /* 隐藏背面 */
        }
    </style>
<body>
    <div id="box">
        <div id="div">
            <div></div>
        </div>
    </div>
</body>
<script src="data.js"></script> 

<script>//data.js中声明了一个数组 分别对于20张图片地址
    (function(){
        //布局生成
        let div = document.querySelector('#div');
        let sty = document.querySelector('#style')
        let cssInner = '';
        let inner = '';

        let w = div.offsetWidth;//div宽度
        console.log(w)

        let deg = 360/data.length;//获取多变角度
        let rad = Math.PI/180 * ((180-deg)/2);
        let r = Math.tan(rad)*w/2;//tan 接收的是一个弧度
        //tan 直角三角形中临边和对边的比值 
        // 弧度 = π/180 * 角度
            data.forEach((item,index) => {
                inner += '<div></div>'
                cssInner += `
                #div div:nth-child(${index + 1}){
                    background-image:url(${item});
                    transform: rotateY(${deg*index}deg) translateZ(${r}px)
                }
                `
            });
            div.innerHTML = inner
            sty.innerHTML += cssInner
    })()
</script>
</html>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值