鱼C论坛

 找回密码
 立即注册
查看: 3195|回复: 6

[已解决]怎样实现图片轮播?

[复制链接]
发表于 2020-12-6 10:07:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
主页.jpg 乌龟.jpg 石家庄3.jpg
最佳答案
2020-12-6 11:33:13
3D轮播图,我写成vue组件模式了,用的Scss,图片会在3D空间里,每张图片被分成10份,进行不同方向的旋转,变成另一张图片


<template>
    <div class="bzgf">  
        <img :src="bzgf" alt="" class="bzgf_bg" />
        <div class="swipe" ref="swipe" @mouseover="timeend" @mouseout="timestart">
            <span class="swipe_item_father" v-for="(itemf,indexf) in 10" :key="indexf">
                <span class="swipe_item_child" v-for="(itemc,indexc) in 4" :key="indexc"></span>
            </span>
            <img :src="btn" alt="" class="left_btn" @click="swipebefore">
            <img :src="btn" alt="" class="right_btn" @click="swipeafter">
        </div>
    </div>
</template>

<script>
export default {
    data() {
        return {
            id:0,
            bzgf: "http://together.vaiwan.com/assets/test.jpg",
            swieptime:'',
            btn:"http://together.vaiwan.com/assets/arrow.png",
            img:[
                "http://together.vaiwan.com/assets/bzgf_one.png",
                "http://together.vaiwan.com/assets/bzgf_two.png",
                "http://together.vaiwan.com/assets/bzgf_three.png",
                "http://together.vaiwan.com/assets/bzgf_four.png"
            ]
        }
    },
    methods:{
        swipechange(){
            let fatheritems=document.getElementsByClassName('swipe_item_father');
            for(let i=0;i<fatheritems.length;i++)
            {
                if(i<5)
                {
                    fatheritems[i].children[0].style.backgroundImage='url('+this.img[0]+')';
                    fatheritems[i].children[1].style.backgroundImage='url('+this.img[1]+')';
                    fatheritems[i].children[2].style.backgroundImage='url('+this.img[2]+')';
                    fatheritems[i].children[3].style.backgroundImage='url('+this.img[3]+')';
                }
                else {
                    fatheritems[i].children[0].style.backgroundImage='url('+this.img[0]+')';
                    fatheritems[i].children[3].style.backgroundImage='url('+this.img[1]+')';
                    fatheritems[i].children[2].style.backgroundImage='url('+this.img[2]+')';
                    fatheritems[i].children[1].style.backgroundImage='url('+this.img[3]+')';
                }
               
            }
            this.swieptime=setInterval(() => {
                this.id++;
                for(let i=0;i<fatheritems.length;i++)
                {
                    if(i<5)
                    {
                        fatheritems[i].style.transform='rotateX('+-90*this.id+'deg)'
                    }
                    else {
                        fatheritems[i].style.transform='rotateX('+90*this.id+'deg)'
                    }
                }
            }, 8000);
        },
        swipebefore(){
            let fatheritems=document.getElementsByClassName('swipe_item_father');
            this.id--;
            for(let i=0;i<fatheritems.length;i++)
            {
                if(i<5)
                {
                    fatheritems[i].style.transform='rotateX('+-90*this.id+'deg)'
                }
                else {
                    fatheritems[i].style.transform='rotateX('+90*this.id+'deg)'
                }
            }
        },
        swipeafter(){
            let fatheritems=document.getElementsByClassName('swipe_item_father');
            this.id++;
            for(let i=0;i<fatheritems.length;i++)
            {
                if(i<5)
                {
                    fatheritems[i].style.transform='rotateX('+-90*this.id+'deg)'
                }
                else {
                    fatheritems[i].style.transform='rotateX('+90*this.id+'deg)'
                }
            }
        },
        timestart(){
            let fatheritems=document.getElementsByClassName('swipe_item_father');
            clearInterval(this.swieptime);
            this.swieptime=setInterval(() => {
                this.id++;
                for(let i=0;i<fatheritems.length;i++)
                {
                    if(i<5)
                    {
                        fatheritems[i].style.transform='rotateX('+-90*this.id+'deg)'
                    }
                    else {
                        fatheritems[i].style.transform='rotateX('+90*this.id+'deg)'
                    }
                }
            }, 8000);
        },
        timeend(){
            clearInterval(this.swieptime);
        }
    },
    mounted(){
        this.swipechange();
    },
    beforeDestroy(){
        clearInterval(this.swieptime);
    }
}
</script>

<style lang="scss" scoped>
    $width:1000px;  //轮播宽度
    $height:480px;  //轮播高度
    $fwidth:200px;  //轮播每个小块的宽度
    $theight:240px; //轮播每个小块的高度
    $top:-240px;    //轮播第二行小块的top值
    $fheight:120px; //轮播小块翻转的高度
    $lefttwo:200px; //轮播第二列的left值
    $leftthree:400px; //轮播第三列的left值
    $leftfour:600px;  //轮播第四列的left值
    $leftfive:800px;  //轮播第五列的left值
    .bzgf {
        .bzgf_bg {
            position: fixed;
            width: 100%;
            height: 100%;
            left: 0;
            top: 0;
        }
        .swipe {
            position: absolute;
            width: $width;   
            height: $height;  
            left: 140px;
            top: 100px;
            .swipe_item_father {
                position: absolute;
                width: $fwidth;
                height: $theight;
                transform-style: preserve-3d;
                transform: rotateX(0deg);
                .swipe_item_child {
                    position: absolute;
                    width: 100%;
                    height: 100%;
                    background-size: $width $height;
                    background-repeat: no-repeat;
                    overflow: hidden;
                    &:nth-child(1) {
                        transform: rotateX(0deg) translateZ($fheight);
                    }
                    &:nth-child(2) {
                        transform: rotateX(-90deg) translateZ($fheight);
                    }
                    &:nth-child(3) {
                        transform: rotateX(-180deg) translateZ($fheight);
                    }
                    &:nth-child(4) {
                        transform: rotateX(-270deg) translateZ($fheight);
                    }
                }
                &:nth-child(1) {
                    left: 0px;
                    top: 0;
                    transition: all 1.6s 0s;
                    .swipe_item_child {
                        background-position: 0px 0px;
                    }
                }
                &:nth-child(2) {
                    left: $lefttwo;
                    top: 0;
                    transition: all 1.6s .2s;
                    .swipe_item_child {
                        background-position: -$lefttwo 0px;
                    }
                }
                &:nth-child(3) {
                    left: $leftthree;
                    top: 0;
                    transition: all 1.6s .4s;
                    .swipe_item_child {
                        background-position: -$leftthree 0px;
                    }
                }
                &:nth-child(4) {
                    left: $leftfour;
                    top: 0;
                    transition: all 1.6s .6s;
                    .swipe_item_child {
                        background-position: -$leftfour 0px;
                    }
                }
                &:nth-child(5) {
                    left: $leftfive;
                    top: 0;
                    transition: all 1.6s .8s;
                    .swipe_item_child {
                        background-position: -$leftfive 0px;
                    }
                }
                &:nth-child(6) {
                    left: 0px;
                    top: $theight;
                    transition: all 1.6s .8s;
                    .swipe_item_child {
                        background-position: 0px $top;
                    }
                }
                &:nth-child(7) {
                    left: $lefttwo;
                    top: $theight;
                    transition: all 1.6s .6s;
                    .swipe_item_child {
                        background-position: -$lefttwo $top;
                    }
                }
                &:nth-child(8) {
                    left: $leftthree;
                    top: $theight;
                    transition: all 1.6s .4s;
                    .swipe_item_child {
                        background-position: -$leftthree $top;
                    }
                }
                &:nth-child(9) {
                    left: $leftfour;
                    top: $theight;
                    transition: all 1.6s .2s;
                    .swipe_item_child {
                        background-position: -$leftfour $top;
                    }
                }
                &:nth-child(10) {
                    left: $leftfive;
                    top: $theight;
                    transition: all 1.6s 0s;
                    .swipe_item_child {
                        background-position: -$leftfive $top;
                    }
                }
            }
            .left_btn {
                position: absolute;
                width: 45px;
                height: 45px;
                border-radius: 50%;
                top: 0;
                bottom: 0;
                margin: auto;
                left: 30px;
                transition: all .3s;
                transform: rotate(180deg);
                opacity: 0.5;
                cursor: pointer;
                &:hover {
                    opacity: 1;
                }
            }
            .right_btn {
                position: absolute;
                width: 45px;
                height: 45px;
                border-radius: 50%;
                top: 0;
                bottom: 0;
                margin: auto;
                right: 30px;
                transition: all .3s;
                opacity: 0.5;
                cursor: pointer;
                &:hover {
                    opacity: 1;
                }
            }
        }
    }
</style>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-6 11:29:00 | 显示全部楼层
单纯用三剑客还是用bootstrap?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-6 11:33:13 | 显示全部楼层    本楼为最佳答案   
3D轮播图,我写成vue组件模式了,用的Scss,图片会在3D空间里,每张图片被分成10份,进行不同方向的旋转,变成另一张图片


<template>
    <div class="bzgf">  
        <img :src="bzgf" alt="" class="bzgf_bg" />
        <div class="swipe" ref="swipe" @mouseover="timeend" @mouseout="timestart">
            <span class="swipe_item_father" v-for="(itemf,indexf) in 10" :key="indexf">
                <span class="swipe_item_child" v-for="(itemc,indexc) in 4" :key="indexc"></span>
            </span>
            <img :src="btn" alt="" class="left_btn" @click="swipebefore">
            <img :src="btn" alt="" class="right_btn" @click="swipeafter">
        </div>
    </div>
</template>

<script>
export default {
    data() {
        return {
            id:0,
            bzgf: "http://together.vaiwan.com/assets/test.jpg",
            swieptime:'',
            btn:"http://together.vaiwan.com/assets/arrow.png",
            img:[
                "http://together.vaiwan.com/assets/bzgf_one.png",
                "http://together.vaiwan.com/assets/bzgf_two.png",
                "http://together.vaiwan.com/assets/bzgf_three.png",
                "http://together.vaiwan.com/assets/bzgf_four.png"
            ]
        }
    },
    methods:{
        swipechange(){
            let fatheritems=document.getElementsByClassName('swipe_item_father');
            for(let i=0;i<fatheritems.length;i++)
            {
                if(i<5)
                {
                    fatheritems[i].children[0].style.backgroundImage='url('+this.img[0]+')';
                    fatheritems[i].children[1].style.backgroundImage='url('+this.img[1]+')';
                    fatheritems[i].children[2].style.backgroundImage='url('+this.img[2]+')';
                    fatheritems[i].children[3].style.backgroundImage='url('+this.img[3]+')';
                }
                else {
                    fatheritems[i].children[0].style.backgroundImage='url('+this.img[0]+')';
                    fatheritems[i].children[3].style.backgroundImage='url('+this.img[1]+')';
                    fatheritems[i].children[2].style.backgroundImage='url('+this.img[2]+')';
                    fatheritems[i].children[1].style.backgroundImage='url('+this.img[3]+')';
                }
               
            }
            this.swieptime=setInterval(() => {
                this.id++;
                for(let i=0;i<fatheritems.length;i++)
                {
                    if(i<5)
                    {
                        fatheritems[i].style.transform='rotateX('+-90*this.id+'deg)'
                    }
                    else {
                        fatheritems[i].style.transform='rotateX('+90*this.id+'deg)'
                    }
                }
            }, 8000);
        },
        swipebefore(){
            let fatheritems=document.getElementsByClassName('swipe_item_father');
            this.id--;
            for(let i=0;i<fatheritems.length;i++)
            {
                if(i<5)
                {
                    fatheritems[i].style.transform='rotateX('+-90*this.id+'deg)'
                }
                else {
                    fatheritems[i].style.transform='rotateX('+90*this.id+'deg)'
                }
            }
        },
        swipeafter(){
            let fatheritems=document.getElementsByClassName('swipe_item_father');
            this.id++;
            for(let i=0;i<fatheritems.length;i++)
            {
                if(i<5)
                {
                    fatheritems[i].style.transform='rotateX('+-90*this.id+'deg)'
                }
                else {
                    fatheritems[i].style.transform='rotateX('+90*this.id+'deg)'
                }
            }
        },
        timestart(){
            let fatheritems=document.getElementsByClassName('swipe_item_father');
            clearInterval(this.swieptime);
            this.swieptime=setInterval(() => {
                this.id++;
                for(let i=0;i<fatheritems.length;i++)
                {
                    if(i<5)
                    {
                        fatheritems[i].style.transform='rotateX('+-90*this.id+'deg)'
                    }
                    else {
                        fatheritems[i].style.transform='rotateX('+90*this.id+'deg)'
                    }
                }
            }, 8000);
        },
        timeend(){
            clearInterval(this.swieptime);
        }
    },
    mounted(){
        this.swipechange();
    },
    beforeDestroy(){
        clearInterval(this.swieptime);
    }
}
</script>

<style lang="scss" scoped>
    $width:1000px;  //轮播宽度
    $height:480px;  //轮播高度
    $fwidth:200px;  //轮播每个小块的宽度
    $theight:240px; //轮播每个小块的高度
    $top:-240px;    //轮播第二行小块的top值
    $fheight:120px; //轮播小块翻转的高度
    $lefttwo:200px; //轮播第二列的left值
    $leftthree:400px; //轮播第三列的left值
    $leftfour:600px;  //轮播第四列的left值
    $leftfive:800px;  //轮播第五列的left值
    .bzgf {
        .bzgf_bg {
            position: fixed;
            width: 100%;
            height: 100%;
            left: 0;
            top: 0;
        }
        .swipe {
            position: absolute;
            width: $width;   
            height: $height;  
            left: 140px;
            top: 100px;
            .swipe_item_father {
                position: absolute;
                width: $fwidth;
                height: $theight;
                transform-style: preserve-3d;
                transform: rotateX(0deg);
                .swipe_item_child {
                    position: absolute;
                    width: 100%;
                    height: 100%;
                    background-size: $width $height;
                    background-repeat: no-repeat;
                    overflow: hidden;
                    &:nth-child(1) {
                        transform: rotateX(0deg) translateZ($fheight);
                    }
                    &:nth-child(2) {
                        transform: rotateX(-90deg) translateZ($fheight);
                    }
                    &:nth-child(3) {
                        transform: rotateX(-180deg) translateZ($fheight);
                    }
                    &:nth-child(4) {
                        transform: rotateX(-270deg) translateZ($fheight);
                    }
                }
                &:nth-child(1) {
                    left: 0px;
                    top: 0;
                    transition: all 1.6s 0s;
                    .swipe_item_child {
                        background-position: 0px 0px;
                    }
                }
                &:nth-child(2) {
                    left: $lefttwo;
                    top: 0;
                    transition: all 1.6s .2s;
                    .swipe_item_child {
                        background-position: -$lefttwo 0px;
                    }
                }
                &:nth-child(3) {
                    left: $leftthree;
                    top: 0;
                    transition: all 1.6s .4s;
                    .swipe_item_child {
                        background-position: -$leftthree 0px;
                    }
                }
                &:nth-child(4) {
                    left: $leftfour;
                    top: 0;
                    transition: all 1.6s .6s;
                    .swipe_item_child {
                        background-position: -$leftfour 0px;
                    }
                }
                &:nth-child(5) {
                    left: $leftfive;
                    top: 0;
                    transition: all 1.6s .8s;
                    .swipe_item_child {
                        background-position: -$leftfive 0px;
                    }
                }
                &:nth-child(6) {
                    left: 0px;
                    top: $theight;
                    transition: all 1.6s .8s;
                    .swipe_item_child {
                        background-position: 0px $top;
                    }
                }
                &:nth-child(7) {
                    left: $lefttwo;
                    top: $theight;
                    transition: all 1.6s .6s;
                    .swipe_item_child {
                        background-position: -$lefttwo $top;
                    }
                }
                &:nth-child(8) {
                    left: $leftthree;
                    top: $theight;
                    transition: all 1.6s .4s;
                    .swipe_item_child {
                        background-position: -$leftthree $top;
                    }
                }
                &:nth-child(9) {
                    left: $leftfour;
                    top: $theight;
                    transition: all 1.6s .2s;
                    .swipe_item_child {
                        background-position: -$leftfour $top;
                    }
                }
                &:nth-child(10) {
                    left: $leftfive;
                    top: $theight;
                    transition: all 1.6s 0s;
                    .swipe_item_child {
                        background-position: -$leftfive $top;
                    }
                }
            }
            .left_btn {
                position: absolute;
                width: 45px;
                height: 45px;
                border-radius: 50%;
                top: 0;
                bottom: 0;
                margin: auto;
                left: 30px;
                transition: all .3s;
                transform: rotate(180deg);
                opacity: 0.5;
                cursor: pointer;
                &:hover {
                    opacity: 1;
                }
            }
            .right_btn {
                position: absolute;
                width: 45px;
                height: 45px;
                border-radius: 50%;
                top: 0;
                bottom: 0;
                margin: auto;
                right: 30px;
                transition: all .3s;
                opacity: 0.5;
                cursor: pointer;
                &:hover {
                    opacity: 1;
                }
            }
        }
    }
</style>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-6 11:34:27 | 显示全部楼层
里面的图片地址自己改,和下面的Scss变量自己改成自己想要的大小,即可,其他我已经做好了封装
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-6 14:50:18 | 显示全部楼层
yuesezhenmei 发表于 2020-12-6 11:34
里面的图片地址自己改,和下面的Scss变量自己改成自己想要的大小,即可,其他我已经做好了封装

这个我还没有学到这个难度,老师要求用js 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-6 14:50:57 | 显示全部楼层
一枚丶学渣 发表于 2020-12-6 11:29
单纯用三剑客还是用bootstrap?

单纯的js
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 21:26:54 From FishC Mobile | 显示全部楼层
我有类型原生js实现的例子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 03:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表