线上效果可以用手机浏览有赞社区的这个帖(点击帖内图片后左右滑动):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%; }
发表评论