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 相关文章推荐
JavaScript 事件记录使用说明
Oct 20 Javascript
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
Mar 17 Javascript
jquery.post用法示例代码
Jan 03 Javascript
Node.js中require的工作原理浅析
Jun 24 Javascript
日常收集整理的JavaScript常用函数方法
Dec 10 Javascript
基于javascript实现checkbox复选框实例代码
Jan 28 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
Jul 03 Javascript
在移动端使用vue-router和keep-alive的方法示例
Dec 02 Javascript
详解微信小程序用定时器实现倒计时效果
Apr 30 Javascript
微信小程序手动添加收货地址省市区联动
May 18 Javascript
基于原生js实现九宫格算法代码实例
Jul 03 Javascript
vue实力踩坑之push当前页无效
Apr 10 Vue.js
相册展示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
Ajax PHP简单入门教程代码
2008/04/25 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
php 生成短网址原理及代码
2014/01/23 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
Vue.js实现立体计算器
2020/02/22 Javascript
从Python程序中访问Java类的简单示例
2015/04/20 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
Python3并发写文件与Python对比
2019/11/20 Python
Python @property原理解析和用法实例
2020/02/11 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
银行求职信个人范文
2013/12/16 职场文书
大学四年规划书范文
2013/12/27 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
公司庆典欢迎词
2015/01/26 职场文书
杜甫草堂导游词
2015/02/03 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android