第2851天:用swiper实现类似微信查看图片的效果

swiper中文)做了一个类似微信查看图片的效果。

线上效果可以用手机浏览有赞社区的这个帖(点击帖内图片后左右滑动):http://bbs.youzan.com/forum.php?mod=viewthread&tid=47601

js

/**
 * 场景: 手机浏览论坛帖子,左右滑动查看楼层图片
 * Author: zhugao
 * 注意:例中的 ’.message' 为每个楼层的容器
 */

var swipers = {};
function showSwiperImg(options) {
    var swiperId = 'js-swiper-' + options.pid;

    // 如果该楼层的swiper已经实例化
    if ($('#' + swiperId).size() > 0) {
        // 定位到当前点击的图片
        swipers[options.pid].slideTo(options.slideIndex, 0);
        // 直接显示该swiper
        $('#' + swiperId).fadeIn(200);
    } else {
        // append容器
        var swiperContainer = $(
            '<div class="swiper-container" id="' + swiperId + '">' +
            '   <div class="swiper-wrapper"></div>' +
            '</div>'
        );
        swiperContainer.hide().appendTo('body').fadeIn(200);

        // append内容
        $(options.elem).parents('.message').find('img').each(function() {
            var imageSource = $(this).data('img-source');
            var swiperSlide = $(
                '<div class="swiper-slide">' +
                '   <img data-src="' + imageSource + '" class="swiper-lazy">' +
                '   <div class="swiper-lazy-preloader"></div>' +
                '</div>'
            );
            swiperSlide.appendTo('#' + swiperId + ' .swiper-wrapper');
        });

        // 实例化swiper
        swipers[options.pid] = new Swiper('#' + swiperId, {
            // 间隔
            spaceBetween: 20,
            // 开启图片延迟加载
            lazyLoading : true,
            // 点击swiper
            onTap: function() {
                $('#' + swiperId).fadeOut(200);
            },
            // 单个图片加载结束
            onLazyImageReady: function(swiper, slide, image) {
                // 移除loading
                $(slide).find('.swiper-lazy-preloader').remove();
            }
        });

        // 定位到当前点击的图片
        swipers[options.pid].slideTo(options.slideIndex, 0);
    }
}

// 调用
$('.message').on('click', 'img', function() {
    // 图片所在的楼层
    var pid = $(this).parents('li').attr('id');
    // 点击了第几张小图
    var slideIndex = $(this).parents('.message').find('img').index(this);

    var options = {
        elem: this,
        pid: pid,
        slideIndex: slideIndex
    };
    showSwiperImg(options);
});

css

.swiper-container {
    position: fixed;
    z-index: 999;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.9);
}
.swiper-slide {
    text-aling: center;
    /* 图片垂直居中 */
    display: -webkit-box;
    -webkit-box-align: center;
}
.swiper-slide img {
    max-width: 100%;
    max-height: 100%;
}

RSS

上一篇:

下一篇:

发表评论

电子邮件地址不会被公开。 必填项已用*标注