轮播图2

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>3d轮播图-jq22.com</title>
<script src="jquery-1.11.3.js"></script>
<style>
 .carousel {
    position:relative;
    padding:20px;
    -webkit-perspective:500px;
    perspective:500px;
    overflow:hidden;
    display:-webkit-box;
    display:-ms-flexbox;
    display:flex;
    -webkit-box-orient:vertical;
    -webkit-box-direction:normal;
    -ms-flex-direction:column;
    flex-direction:column;
    -webkit-box-align:center;
    -ms-flex-align:center;
    align-items:center;
}
.carousel > * {
    -webkit-box-flex:0;
    -ms-flex:0 0 auto;
    flex:0 0 auto;
}
.carousel figure {
    margin:0;
    width:60%;
    height:100%;
    -webkit-transform-style:preserve-3d;
    transform-style:preserve-3d;
    -webkit-transition:-webkit-transform 0.5s;
    transition:-webkit-transform 0.5s;
    transition:transform 0.5s;
    transition:transform 0.5s,-webkit-transform 0.5s;
}
.carousel figure img {
    display:inline-block;
    width:100%;
    height:100%;
    box-sizing:border-box;
    padding:0 0px;
    cursor:pointer;
    background-size:100% 100%;
}
.carousel figure img:not(:first-of-type) {
    position:absolute;
    left:0;
    top:0;
}
.nav {
    position:absolute;
    width:44px;
    height:44px;
    background:#ddd;
    top:calc(50% - 22px);
    cursor:pointer;
}
div.next {
    right:0px;
    background-position:right top;
}
div.prev {
    left:0px;
}
</style>
</head>
<body>
<div class="carousel yice" data-gap="100">
    <figure class="images">
        <img src="http://www.jq22.com/img/cs/500x300-1.png">
        <img src="http://www.jq22.com/img/cs/500x300-2.png">
        <img src="http://www.jq22.com/img/cs/500x300-3.png">
        <img src="http://www.jq22.com/img/cs/500x300-4.png">
        <img src="http://www.jq22.com/img/cs/500x300-5.png">
        <img src="http://www.jq22.com/img/cs/500x300-6.png">
        <img src="http://www.jq22.com/img/cs/500x300-7.png">
        <img src="http://www.jq22.com/img/cs/500x300-8.png">
        <img src="http://www.jq22.com/img/cs/500x300-9.png">

    </figure>
    <div class="nav prev">《</div>
    <div class="nav next">》</div>
</div>

<script>
//调用
window.addEventListener('load', function() {
    var carousels = document.querySelectorAll('.carousel');

    for (var i = 0; i < carousels.length; i++) {
        carousel(carousels[i]);


    }
});

//封装
function carousel(root) {
    var figure = root.querySelector('figure'),
        nav = root.querySelector('nav'),
        images = figure.children,
        n = images.length,
        gap = root.dataset.gap || 0,
        bfc = 'bfc' in root.dataset,
        theta = 2 * Math.PI / n,
        currImage = 0;

    setupCarousel(n, parseFloat(getComputedStyle(images[0]).width));
    window.addEventListener('resize', function() {
        setupCarousel(n, parseFloat(getComputedStyle(images[0]).width));
    });

    setupNavigation();

    function setupCarousel(n, s) {
        var apothem = s / (2 * Math.tan(Math.PI / n));

        figure.style.transformOrigin = '50% 50% ' + -apothem + 'px';

        for (var i = 0; i < n; i++) {
            var padTB = gap / 2 + 'px';
            var padLR = gap + 'px';
            $(images[i]).css('padding', (padTB))

        }
        for (i = 1; i < n; i++) {
            var num = i * theta

            // console.log(apothem)
            images[i].style.transformOrigin = '50% 50%' + -apothem + 'px';
            images[i].style.transform = 'rotateY(' + i * theta + 'rad)';
            console.log(num)
        }
        if (bfc)
            for (i = 0; i < n; i++) {
                images[i].style.backfaceVisibility = 'hidden';
            }
        rotateCarousel(currImage);
    }

    function setupNavigation() {
        // var nav =  document.getElementsByClassName('nav').addEventListener('click', onClick, true);;
        $('.nav').on('click', onClick)


        function onClick(e) {
            e.stopPropagation();
            var t = e.target;
            if (t.classList.contains('next')) {
                currImage++;
            } else {
                currImage--;
            }
            rotateCarousel(currImage);
        }
    }

    function rotateCarousel(imageIndex) {
        figure.style.transform = 'rotateY(' + imageIndex * -theta + 'rad)';
    };
    // 启动定时器
    $('.carousel .nav, .carousel img').hover(function() {
        clearInterval(timer);
    }, function() {
        timer = setInterval(function() {
            currImage++
            rotateCarousel(currImage);
        }, 2000);
    });
    var timer = null;
    timer = setInterval(function() {
        currImage++
        rotateCarousel(currImage);
    }, 2000);

}
</script>

</body>
</html>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值