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 相关文章推荐
摘自百度的图片轮换效果代码
Nov 19 Javascript
javascript实现上传图片并预览的效果实现代码
Apr 11 Javascript
原生JavaScript制作微博发布面板效果
Mar 11 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
Aug 09 Javascript
node.js文件上传处理示例
Oct 27 Javascript
AngularJS模仿Form表单提交的实现代码
Dec 08 Javascript
Jquery Easyui日历组件Calender使用详解(23)
Dec 18 Javascript
js封装tab标签页实例分享
Dec 19 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
Aug 17 jQuery
vuejs前后端数据交互之从后端请求数据的实例
Aug 11 Javascript
Vue中的v-for循环key属性注意事项小结
Aug 12 Javascript
Vue 表情包输入组件的实现代码
Jan 21 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生成便于打印的网页
2006/10/09 PHP
PHP制作用户注册系统
2015/10/23 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
使用Python的PEAK来适配协议的教程
2015/04/14 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
复古服装:RetroStage
2019/05/10 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
应届毕业生求职信范例分享
2013/12/17 职场文书
区域销售经理职责
2013/12/22 职场文书
党员入党表决心的话
2014/03/11 职场文书
分公司经理任命书
2014/06/05 职场文书
内科护士节演讲稿
2014/09/11 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
本地通过nginx配置反向代理的全过程记录
2021/03/31 Servers
Nginx本地目录映射实现代码实例
2021/03/31 Servers
Python读取和写入Excel数据
2022/04/20 Python