被fancybox坑的心路历程
今天项目中需要使用fancybox来展示图片,但是使用中发现fancybox没起作用,点击图片直接刷新了页面!
fancybox的原理是通过给a标签绑定事件,使得a标签不在是直接跳转链接,而是把链接中的图片请求到一个js容器当中。
fancybox需要初始化,类似如下
$('.fancybox').fancybox({
'autoSize' : true,
'autoHeight' : true,
'autoWidth' : true,
'autoResize' : true,
'autoCenter' : true,
'scrolling' : 'no',
'arrows' : true,
'closeBtn' : true,
'mouseWheel' : false,
'modal' : false,
'loop' : false,
'playSpeed' : 500,
'helpers' : {
'title' : {'type' : 'float'},
'buttons' : {},
'overlay' : {'closeClick' : false}
},
'afterLoad' : function() {
this.title = 'Image ' + (this.index + 1) + ' of '
+ this.group.length + (this.title ? ' - ' + this.title : '');
}
});
尝试将fancybox初始化函数在页面加载后执行,失败!
一般,我们在页面初始化时执行这个初始化操作。但是项目中的图片数据时使用异步加载的,因此在图片加载完后,新请求过来打到dom上的图片外a标签并没有被fancybox初始化,因此a标签还是默认跳转url。
尝试将fancybox初始化函数在ajax请求success最后段执行,失败!
查资料说在ajax的success默认执行上述代码,想想也是正确的,但是我的项目ajax请求得到的数据并不是一堆图片,而是一堆图片的url,当ajax的success执行完成之后,其实ajax得到的图片url才真正的开始通过img标签进行资源请求!
放到success后也不能在图片加载完后执行fancybox初始化,这可怎么办?
尝试将fancybox初始化函数在success最后的setTimeout中延时执行,失败!
无奈,只能在ajax的success最后的地方使用setTimeout,延时执行初始化fancybox的代码。结果还是跳转url了。
function initFancybox() {
setTimeout(function() {
console.log($(".fancybox").length);
$('.fancybox').fancybox({
'autoSize' : true,
'autoHeight' : true,
'autoWidth' : true,
'autoResize' : true,
'autoCenter' : true,
'scrolling' : 'no',
'arrows' : true,
'closeBtn' : true,
'mouseWheel' : false,
'modal' : false,
'loop' : false,
'playSpeed' : 500,
'helpers' : {
'title' : {'type' : 'float'},
'buttons' : {},
'overlay' : {'closeClick' : false}
},
'afterLoad' : function() {
this.title = 'Image ' + (this.index + 1) + ' of '
+ this.group.length + (this.title ? ' - ' + this.title : '');
}
});
}, 500);
}
而且没有任何征兆,控制台也正常输出了8,获取到了8个.fancybox元素,说明初始化是在图片加载之后执行的,应该没有问题啊?!
调程序,不拿出点侦探破案的劲头真的写不出程序!
通过录屏抓拍,发现从点击图片外a标签到改变url跳转到图片页中间,控制台报了错!!!

咔嚓!这时什么鬼,搜索也搜不到资料。
好,跟踪代码!不就是fancybox的232行嘛!

全局搜索forbidFancybox,果然在整个fancybox的js中搜不到,好!在我的js中添加这个变量!
自己添加forbidFancybox变量

再次请求,成功!

我的天啊,fancybox查看图片框架竟然有这么个bug!未定义的变量不能使用都不知道吗?一群垃圾码农造的框架!
被fancybox坑的心路历程的更多相关文章
- 【react native】有关入坑3个月RN的心路历程
由于一些原因,笔者最近变更到了RN的团队,回归到了hybrid app的开发的圈子中,固然是有蛮多新鲜感和新机遇的,不过遥想起以前在hybrid中各种view之前跳转的头疼等各种问题,笔者怀着忐忑的心 ...
- VS2012+EF6+Mysql配置心路历程
为了学习ORM,选择了EntityFramework,经历了三天两夜的煎熬,N多次错误,在群里高手的帮助下,终于成功,现在将我的心路历程记录下来,一是让自己有个记录,另外就是让其它人少走些弯路. 我的 ...
- 阿里云服务器上安装mysql的心路历程(博友们进来看看哦)
在阿里云花了100买了一台云服务器,配置如下: CPU: 1核 内存: 512MB 数据盘: 0G 带宽: 1Mbps 阿里云服务器安装mysql搞得我想吐血,搞了一个多星期,现在才搞好,而且,还有许 ...
- G彩娱乐网一个程序员到一个销售高手的心路历程
0.引言 我大学本科读的是理工科,后来毕业以后,我逐渐走上了程 序员的道路.每天面对电脑一行一行的敲代码,这被我们程序员们戏称为"搬砖头",因为我们所做的事跟民工搬砖头砌墙本质上是 ...
- 心路历程:当win10遇上win7激活程序...请默哀
经历一次莫名其妙的懵逼系统崩溃后,我对破解软件/激活软件终于有了阴影,想想就想哭,不过怨不了别人,锅不能随便甩,怪自己粗心大意,怪自己太懒呜呜呜... 所以有心将这次心路历程记录下来,谨防自己下次再犯 ...
- 顶级项目孵化的故事系列——Kylin的心路历程【转】
现在已经名满天下的 Apache Kylin,是 Hadoop 大数据生态系统不可或缺的一部分,要知道在 Kylin 项目早期,可是以华人为主的开源团队,一路披荆斩棘经过几年的奋斗,才在 Apache ...
- 一个C#开发者重温C++的心路历程
不知道为什么,似乎很多人理解跑偏了,在这里我要说明一下. 首先,我并没有对C++语言有偏见,我只是单纯的在学习时,在理解时,对C++语言进行一些吐槽,我相信,很多学习C++的人,也会有类似的吐槽. 其 ...
- 我的Java历程_maven配置的心路历程
从github上download了个maven管理的开源项目,接下来随笔下安装maven的心路历程: 异常尴尬的是import进ide之后一个红色的感叹号!震惊!google一下知道了,maven没配 ...
- 同门不同类—创新Aurvana Live2/Air简评(附随身视听设备心路历程)
(注,本文把live2/air并成一起写的,同时本人是木耳,请轻拍) 本命年各种坏东西,很是无语,终于坏到耳塞耳机了来了,之前用的拜亚DT235无缘无故就一边不响了,无奈只能扔了. 纠结了好几个月,终 ...
随机推荐
- nginx 多级反向代理获取客户端真实IP
set_real_ip_from ; set_real_ip_from ; set_real_ip_from ; set_real_ip_from ; set_real_ip_from 127.0.0 ...
- iOS 崩溃分析
崩溃统计分析,在APP中是非常常见一种优化APP,发现APP的BUG的方式. 1.异常处理 可通过try catch 方式处理,如果发生异常,会走catch ,最终走fianlly.对一些我们不想他崩 ...
- Android -- ViewGroup源码分析+自定义
1,我们前三篇博客了解了一下自定义View的基本方法和流程 从源码的角度一步步打造自己的TextView 深入了解自定义属性 onMeasure()源码分析 之前,我们只是学习过自定义View,其实自 ...
- Android -- 仿小米锁屏画报
1,首先看一下我们今天实现的效果,效果图如下: 2,首先说一下大体的实现思路,首先这个视图一共分为三层,最外层是一个RecyclerView,第二层是一个被虚化的ImageView,第三层是一个正常的 ...
- Unity shader学习之渐变纹理
渐变纹理,及使用纹理来存储漫反射光照的结果,这种技术在游戏<军团要塞2>中流行起来,它也是由Valve公司(提出半兰伯特光照技术的公司)提出来的,他们使用这种技术来渲染游戏中具有插画风格的 ...
- strlen实现
1.strlen函数. 普通版实现方法, int strlen( char *s) { int length = 0; while(*s++) length++; return length; } 优 ...
- [1]传奇3服务器源码分析一 LoginGate
服务端下载地址: 点击这里 网上基本上都有分析该源码的分析详解,如:请点击该链接,但容易晕,而且也不全!所以才有了本文! 一.首先来看服务端的LoginGate源码 先来张图比较让人容易理解
- Linux 压缩解压缩命令详解
tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...
- 【Hadoop学习之七】Hadoop YARN
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 YARN: ...
- QPushButton 控制两种状态
[1]Custom.cpp #include "CustomButton.h" CustomButton::CustomButton(QWidget* parent) : QPus ...