今天项目中需要使用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坑的心路历程的更多相关文章

  1. 【react native】有关入坑3个月RN的心路历程

    由于一些原因,笔者最近变更到了RN的团队,回归到了hybrid app的开发的圈子中,固然是有蛮多新鲜感和新机遇的,不过遥想起以前在hybrid中各种view之前跳转的头疼等各种问题,笔者怀着忐忑的心 ...

  2. VS2012+EF6+Mysql配置心路历程

    为了学习ORM,选择了EntityFramework,经历了三天两夜的煎熬,N多次错误,在群里高手的帮助下,终于成功,现在将我的心路历程记录下来,一是让自己有个记录,另外就是让其它人少走些弯路. 我的 ...

  3. 阿里云服务器上安装mysql的心路历程(博友们进来看看哦)

    在阿里云花了100买了一台云服务器,配置如下: CPU: 1核 内存: 512MB 数据盘: 0G 带宽: 1Mbps 阿里云服务器安装mysql搞得我想吐血,搞了一个多星期,现在才搞好,而且,还有许 ...

  4. G彩娱乐网一个程序员到一个销售高手的心路历程

    0.引言 我大学本科读的是理工科,后来毕业以后,我逐渐走上了程 序员的道路.每天面对电脑一行一行的敲代码,这被我们程序员们戏称为"搬砖头",因为我们所做的事跟民工搬砖头砌墙本质上是 ...

  5. 心路历程:当win10遇上win7激活程序...请默哀

    经历一次莫名其妙的懵逼系统崩溃后,我对破解软件/激活软件终于有了阴影,想想就想哭,不过怨不了别人,锅不能随便甩,怪自己粗心大意,怪自己太懒呜呜呜... 所以有心将这次心路历程记录下来,谨防自己下次再犯 ...

  6. 顶级项目孵化的故事系列——Kylin的心路历程【转】

    现在已经名满天下的 Apache Kylin,是 Hadoop 大数据生态系统不可或缺的一部分,要知道在 Kylin 项目早期,可是以华人为主的开源团队,一路披荆斩棘经过几年的奋斗,才在 Apache ...

  7. 一个C#开发者重温C++的心路历程

    不知道为什么,似乎很多人理解跑偏了,在这里我要说明一下. 首先,我并没有对C++语言有偏见,我只是单纯的在学习时,在理解时,对C++语言进行一些吐槽,我相信,很多学习C++的人,也会有类似的吐槽. 其 ...

  8. 我的Java历程_maven配置的心路历程

    从github上download了个maven管理的开源项目,接下来随笔下安装maven的心路历程: 异常尴尬的是import进ide之后一个红色的感叹号!震惊!google一下知道了,maven没配 ...

  9. 同门不同类—创新Aurvana Live2/Air简评(附随身视听设备心路历程)

    (注,本文把live2/air并成一起写的,同时本人是木耳,请轻拍) 本命年各种坏东西,很是无语,终于坏到耳塞耳机了来了,之前用的拜亚DT235无缘无故就一边不响了,无奈只能扔了. 纠结了好几个月,终 ...

随机推荐

  1. Swagger Editor本地安装

    一:安装Node JS 二:下载源码swagger-editor源码,解压 下载地址:https://github.com/swagger-api/swagger-editor 三:在解压目录下运行进 ...

  2. 使用spring的aop对Struts2的Action拦截后出现依赖注入为空问题

    两种解决方案: 1.action类继承ActionSupport了后,出现依赖注入为空,要在applicationContext.xml配置中加入:<aop:aspectj-autoproxy ...

  3. [LeetCode] 69. Sqrt(x)_Easy tag: Binary Search

    Implement int sqrt(int x). Compute and return the square root of x, where x is guaranteed to be a no ...

  4. App导航设计全面梳理——附免费原型模版!

    生活中大家或多或少都会有迷路的经验,但你是不是从来没思考过迷路的定义是什么? 迷路的定义其实有两个核心: 1.想要到达一个目的地. 2.不知道自己在哪里,应该往哪走. 和生活中的迷路一样,我们在使用A ...

  5. SmartGit 过期破解 - 授权文件 Free Trial License to Non-Commercial

    亲测可用~ Windows: %APPDATA%/syntevo/SmartGit/OS X:    ~/Library/Preferences/SmartGit/Unix/Linux:  ~/.sm ...

  6. sparse.coo_matrix()

    coo_matrix.tocsr(copy = False ) 将此矩阵转换为压缩稀疏行格式,重复的条目将汇总在一起. 举例: from numpy import array from scipy.s ...

  7. Locust性能测试

    https://www.cnblogs.com/yoyoketang/p/9638151.html https://www.cnblogs.com/yoyoketang/p/9642242.html ...

  8. pyCharm编辑器激活使用

    1.打开激活窗口 2.选择 Activate new license with License server (用license server 激活) 3.在 License sever addres ...

  9. Selenium基础知识(三)元素判断

    一.由于有些页面加载完后,某些元素还没有加载,这样就会导致异常,脚本稳定性变差 为了解决这个问题,selenium提供了WebDriverWait以及implicitly_wait()等待 WebDr ...

  10. 兼容PC和手机触摸代码

    测试环境:unity3d 4.6.1 using UnityEngine; using System.Collections; public class neccc : MonoBehaviour { ...