被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 >>> ...