PhotoSwipe异步动态加载图片方法


Posted in Javascript onAugust 25, 2016

在开发搜房家居M站的时候,搜房家居装修效果图相册展示效果需要用到PhotoSwipe插件来显示图片。
特点:
1. 家居提供的接口,每次只能获取一张图片
2. 装修效果图的张数不限。
3. 从PhotoSwipe用法来看,在PhotoSwipe初始化前必须把所有图片列出。
 instance = PhotoSwipe.attach( window.document.querySelectorAll('#Gallery a'), options ); 

标签a是PhotoSwipe初始化前的, 之后再往Gallery里动态添加是无效的。 

目前的方案是先调用10次接口,列出10张图片,当展示完这10张图片后,通过网址跳转到下一页,展示下一组的10个图片。 

这种方案的优点
1. 容易实现。
缺点也很是明显:
1. 每次跳转到下一页都会让用户等待比较长的时间。(10次调用接口的时间+当前图片下载到客户端的时间+其他时间)
2. 在图片左右滑动的过程中,突然再来年页面跳转也影响了用户体验。
如何优化PhotoSwipe实现不分页不跳转。
用过PhotoSwipe的人都应该了解PhotoSwipe.EventTypes.onDisplayImage。每次显示一个图片都会触发这个事件,

instance.addEventHandler(PhotoSwipe.EventTypes.onDisplayImage, function(e){
  //在这里实现一些代码功能。
 });

通过研究发现通过e.target.cache.images可以访问所以展示的图片对象集合。这样思路就比较清晰了—“先定义足够的a占位,然后在图片滑动显示的过程中不断地通过AJAX逐个获取图片的地址,然后赋值e.target.cache.images图片集合中的相应图片。” 

下面代码是这个思路方法的实现(为了方便说明这个思路,略去了其中额外细节) 

<ul id="Gallery" style="display:none;">
<!-- 下面10个是一开始通过接口获取到的图片 -->
<li><a href="viewimage/zxb/2014_06/30/82/86/pic/000711232400/800x800.jpg"></a></li>
<li><a href="viewimage/zxb/2014_04/18/31/94/pic/000664552500/800x800.jpg"></a></li>
<li><a href="viewimage/zxb/2014_06/14/69/65/pic/002962064200/800x800.jpg"></a></li>
<li><a href="viewimage/zxb/2014_06/05/75/33/pic/005426525600/800x800.png"></a></li>
<li><a href="viewimage/zxb/2014_02/12/13/15/pic/007331476000/800x800.jpg"></a></li>
<li><a href="viewimage/zxb/2014_05/06/44/99/pic/004717983300/800x800.jpg"></a></li>
<!-- 以下是占位a标签-->
<li><a href="common_m/m_public/images/loading.gif"></a></li>
<li><a href="common_m/m_public/images/loading.gif"></a></li>
<li><a href="common_m/m_public/images/loading.gif"></a></li>
<li><a href="common_m/m_public/images/loading.gif"></a></li>
<li><a href="common_m/m_public/images/loading.gif"></a></li>
<!-- 可以依要求加多个上面的占位a标签-->
</ul>

通过侦听PhotoSwipe.EventTypes.onDisplayImage事件,修改e.target.cache.images,以实现在图片未下载前更正占位图片的地址。 

var aimgArrIndex=0;
var picSetIndex = 10;
instance.addEventHandler(PhotoSwipe.EventTypes.onDisplayImage, function(e){
  var needSetImg = e.target.cache.images[picSetIndex++];
  if(needSetImg){
    $.getJSON(“./index.php?c=jiaju&a=ajaxNextPicInfo&picid={picid参数}”, function(data){
      var url = data[0][“img”]
      new Image().src = url;//预加载这个图片
      needSetImg["src"] = url;//把图片地址赋值给PhotoSwipe的图片集合中相应对象属性
      $(needSetImg.metaData.item).data('comment','');//其他附加内容通过这样设置
    })
  }
});

index.php?c=jiaju&a=ajaxNextPicInfo&picid={picid参数} 返回内容。根据picid的不同每调用一次返回一条图片的相关信息。 

[{"img":http://img1n.soufunimg.com/viewimage/zxb/2014_06/14/69/65/pic/002962064200/800x800.jpg}]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
2种jQuery 实现刮刮卡效果
Feb 01 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
Nov 19 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
Jul 22 Javascript
Javascript获取图片原始宽度和高度的方法详解
Sep 20 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
Apr 11 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
Aug 06 Javascript
VUE脚手架的下载和配置步骤详解
Apr 01 Javascript
3分钟读懂移动端rem使用方法(推荐)
May 06 Javascript
three.js利用卷积法如何实现物体描边效果
Nov 27 Javascript
Vue中点击active并第一个默认选中功能的实现
Feb 24 Javascript
Vue封装Axios请求和拦截器的步骤
Sep 16 Javascript
微信小程序实现分页加载效果
Nov 19 Javascript
相册展示PhotoSwipe.js插件实现
Aug 25 #Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
Aug 25 #Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
Aug 25 #Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
Aug 25 #Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 #Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
Aug 25 #Javascript
jQuery组件easyui对话框实现代码
Aug 25 #Javascript
You might like
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
jquery 学习笔记 传智博客佟老师附详细注释
2020/09/12 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
Python的时间模块datetime详解
2017/04/17 Python
Python聊天室程序(基础版)
2018/04/01 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
python实现四人制扑克牌游戏
2020/04/22 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
如何使用Python调整图像大小
2020/09/26 Python
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
三字经教学反思
2014/04/26 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
个人工作表现评价材料
2014/09/21 职场文书
校园安全广播稿范文
2014/09/25 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
2014年妇产科工作总结
2014/12/08 职场文书
付款承诺函范文
2015/01/21 职场文书
道德与公民自我评价
2015/03/09 职场文书
运动会800米赞词
2015/07/22 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
2019个人工作总结
2019/06/21 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书