H5缩略图全屏放大并左右滑动实现(适配H5和PC)

最近做H5遇到一个任务:点击页面缩略图全屏放大,并要支持左右滑动切换大图。这里特地记录一下:

先看高清无码效果图:

首先,创建缩略图容器:

<div id="thumbs">
    <a href="img/1.jpg" style="background-image:url(img/1.jpg)" title="风景一"></a>
    <a href="img/2.jpg" style="background-image:url(img/2.jpg)" title="风景二"></a>
    <a href="img/3.jpg" style="background-image:url(img/3.jpg)" title="风景三"></a>
    <a href="img/4.jpg" style="background-image:url(img/4.jpg)" title="风景四"></a>
    <a href="img/5.jpg" style="background-image:url(img/5.jpg)" title="风景五"></a>
    <a href="img/6.jpg" style="background-image:url(img/6.jpg)" title="风景六"></a>
    <a href="img/7.jpg" style="background-image:url(img/7.jpg)" title="风景七"></a>
    <a href="img/8.jpg" style="background-image:url(img/8.jpg)" title="风景八"></a>
    <a href="img/9.jpg" style="background-image:url(img/9.jpg)" title="风景九"></a>
</div>

之后,用户点击某张缩略图时触发JS动态创建全屏弹层,并自动加载相邻前一张后一张大图:

items.on('click', function(e){
            e.preventDefault();
            
            // Find the position of this image
            // in the collection
            
            index = items.index(this);
            showOverlay(index);
            showImage(index);
            
            // Preload the next image
            preload(index+1);
            
            // Preload the previous
            preload(index-1);
            
        });

接下来实现左右滑动切换:

// Listen for touch events on the body and check if they
        // originated in #gallerySlider img - the images in the slider.
        var startX;// original position
        $('body').on('touchstart', '#gallerySlider img', function(e){
            
            var touch = e.originalEvent;
                startX = touch.changedTouches[0].pageX;
            
            slider.on('touchmove',function(e){
                
                e.preventDefault();
                
                touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
                
                if(touch.pageX - startX > 10){
                    slider.off('touchmove');
                    showPrevious();
                }
                else if (touch.pageX - startX < -10){
                    slider.off('touchmove');
                    showNext();
                }
            });

            // Return false to prevent image 
            // highlighting on Android
            return false;
            
        }).on('touchend',function(e){
            slider.off('touchmove');
            // Hide the gallery if the images is touched / clicked, but not slide
            touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
            if(touch.pageX - startX == 0){
                hideOverlay();
            }
        });
为了适配PC网页,可以检测下当前设备支持滑动与否,否的话,弹层大图左右加入切换按钮,里面变轮播图效果:
// If the browser does not have support 
        // for touch, display the arrows
        if ( !("ontouchstart" in window) ){
            overlay.append(prevArrow).append(nextArrow);
            
            prevArrow.click(function(e){
                e.preventDefault();
                showPrevious();
            });
            
            nextArrow.click(function(e){
                e.preventDefault();
                showNext();
            });
            
            $('body').on('click', '#gallerySlider img', function(e){
                e.preventDefault();
                hideOverlay();
            });
        }

有时候图片数量多的话,查看大图还需要页码或者底部显示缩略图:

// Show index in the overlay page
        if(showIndex){
            photoNum.appendTo(overlay);
            setSumPhotoNum(items);
        }

        // Add thumbholders to the overlay page
        if(showThumbs){
            photoThumbs.find('ul').append(thumbholders);
            photoThumbs.find('li').on('click',function(e){
                e.preventDefault();
                index = thumbholders.index(this);
                jumpTo(index);
            });
            photoThumbs.appendTo(overlay);
        }

OK,以上是大致的功能点实现,具体细节见源码index.js

 

转载于:https://www.cnblogs.com/zonda/p/5525235.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值