jquery实现照片墙

Posted sgs123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery实现照片墙相关的知识,希望对你有一定的参考价值。

jquery照片墙

  • 由15张图片构成,大致思路:随机生成所有图片-->点击其中一张变为一张大图-->点击大图又变回多张
  • 主要用到jquery实现
  • 先来看看效果

技术图片

html

    <div class="wraper">
       <ul class="wraper-ul"></ul>
    </div>

css:

    * {
        margin: 0;
        padding: 0;
        list-style: none;
    }
    html,
    body,
    .wraper {
        width: 100%;
        height: 100%;
        background-color: #ececec;
        display: flex;
        justify-content: center;
        align-items: center;
    }
    .wraper-ul {
        width: 80%;
        height: 80%;
        position: relative;
        perspective: 800px;
    }
    .wraper-ul li {
        position: absolute;
        transform-style: preserve-3d;
        background-color: #fff;
        cursor: pointer;
    }
    .box {
        width: 100%;
        height: 100%;
        transform: scale(0.9);
    }
    .box img {
        width: 100%;
        height: 100%;
    }

js:

    class photos {
    constructor(className){
        this.wraper = $(className);
        this.ulW = parseInt(this.wraper.css('width'));
        this.ulH = parseInt(this.wraper.css('height'));
        this.liW = this.ulW /5;
        this.liH = this.ulH /3;
        this.change = true;
        this.creatImgs();
    }
    creatImgs(){
        //行
        for(let i =0;i<3;i++){
            //列
            for(let j=0;j<5;j++){
                let lis = $("<li><div class='box'><img src='' alt=''></div></li>")
                    .css({
                        width:this.liW +'px',
                        height:this.liH +'px',
                        left:j*this.liW +'px',
                        top:i*this.liH + 'px',
                        transform:'scale(0.9) rotate('+(Math.random() * 40 - 20)+'deg)'+ 
                            'translateX(' + (Math.random() * 100 - 50) + 'px)' +
                            'translateY(' + (Math.random() * 100 - 50) + 'px)' +
                            'translateZ(' + (Math.random() * 200 - 100) +'px)'
                    })
                    .find('img').attr('src','./img/'+(i*5+j+11) +'.jpg')
                    .end()
                this.wraper.append(lis);
            }
        }
        this.changeImgs();
    }
    changeImgs(){
        this.wraper.find('li').on('click',(e)=>{
            if(this.change){ //多张变一张
                let bgImg = $(e.target).attr('src');
                let bgLeft =0;
                let bgTop =0;
                $('li').each((index,item)=>{
                    $(item).delay(10 * index).animate({opacity:0},200,()=>{
                        $(item).css({
                            width: this.liW +'px',
                            heigth:this.liH +'px',
                            transition: '',
                            opacity:'1',
                            transform: 'scale(1) rotate(0deg)' +
                                'translateX(0px)' +
                                'translateY(0px)' +
                                'translateZ(0px)'
                        }) 
                        $(item).find('.box').css({
                            transform:'scale(1)'
                        })
                        $(item).find('img').attr('src', bgImg).css({
                            position:'absolute',
                            width:this.ulW +'px',
                            height:this.ulH +'px',
                            top: -bgTop,
                            left: -bgLeft
                        });
                        bgLeft += this.liW;
                        if(bgLeft>=this.ulW){
                            bgTop +=this.liH;
                            bgLeft =0;
                        }
                    })
                })
                this.change = false;
            }else{ //一张变多张
                this.change = true;
                $('li').each((index, item) => {
                    let j =index % 5;
                    let i =Math.floor(index / 5);  
                    $(item).animate({ opacity: 0 }, 200, () => { 
                        $(item).find('img').css({
                            position: 'absolute',
                            width: '100%',
                            height: '100%',
                            top: 0,
                            left: 0
                        }) 
                        $(item).find('img').attr('src', './img/' + (index+11) + '.jpg')
                        $(item).find('.box').css({
                            transform: 'scale(0.9)'
                        })
                        $(item).css({
                            width: this.liW + 'px',
                            height: this.liH + 'px',
                            left: j * this.liW + 'px',
                            top: i * this.liH + 'px',
                            transition:'all,0.5s',
                            opacity: '1',
                            transform: 'scale(0.9) rotate(' + (Math.random() * 40 - 20) + 'deg)' +
                                'translateX(' + (Math.random() * 100 - 50) + 'px)' +
                                'translateY(' + (Math.random() * 100 - 50) + 'px)' +
                                'translateZ(' + (Math.random() * 200 - 100) + 'px)'
                        })
                    })    
                })
            }
        })
    }
}
var photo = new photos('.wraper-ul');

参考自:腾讯课堂渡一教育

以上是关于jquery实现照片墙的主要内容,如果未能解决你的问题,请参考以下文章

wordpress 照片墙 是如何实现的

照片墙展示

WPF 照片墙的实现

利用python,20行代码即可实现照片墙,还可以生成爱心❤️形状哟

css3照片墙+曲线阴影

心型照片墙