被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无缘无故就一边不响了,无奈只能扔了. 纠结了好几个月,终 ...
随机推荐
- jquery tooltip插件
qtip2:http://qtip2.com/ bower install qtip2 // lowercase! 引入一个css和插件即可. <script type="text/j ...
- 基于Jenkins的持续交付方案
简介 Jenkins是开源的自动化编译.测试.部署的Web应用程序一个持续性交付应用 Jenkins的优势 1.Jenkins在国内的开发者中认可度较高,很多创业公司的自建持续交付系统的选择大部分都是 ...
- android apk打包编译好的so
加入so到apk有多种方法 1.build.gradle(Module)中android子项中加入以下代码,并将so放到到armeai/armeabi-v7a 子目录下 sourceSets { ma ...
- servlet 的servletconfig
- 前端forEach在Array、map、set中的使用,weakset,weakmap
数组: var s = ['a','b','c']; s.forEach(function(ele,index,array){ console.log(ele); }); Map: var map = ...
- C# 图片 旋转和翻转 RotateFlip
1.Rotate90FlipX2.Rotate90FliY3.Rotate90FlipXY4.Rotate90FlipNone以上面四个为例:1是指定后接水平翻转的90度顺时针旋转,2是指定后接垂直翻 ...
- PE结构图示
- html5-css的使用强制优先级
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- html5-内联框架
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- python 测试文件或者文件目录是否存在 测试文件类型,获取文件大小,获取修改日期
----测试一个文件或目录是否存在 >>> import os >>> os.path.exists('/etc/passwd') True >>> ...