学习笔记:调用js文件冲突问题解决方案
之前自己动手做了一个小网站,在实现过程中遇到了一个关于js文件调用冲突的问题。
具体问题描述如下:在index.html文件中引用了两个js文件,单独添加banner.js或者focus_pic.js都可以运行并且实现相应的功能,但是两个同时添加两个文件后,后banner.js失效了。经过一番研究翻阅了一些资料,并在网上求助于各路大神,终于将问题的原因搞明白了。
banner.js代码如下所示:
var t = n = 0, count; $(document).ready(function(){ count=$("#banner_list a").length; $("#banner_list a:not(:first-child)").hide(); $("#banner_info").html($("#banner_list a:first-child").find("img").attr('alt')); $("#banner_info").click(function(){window.open($("#banner_list a:first-child").attr('href'), "_blank")}); $("#banner li").click(function() { var i = $(this).text() - 1;//获取Li元素内的值,即1,2,3,4 n = i; if (i >= count) return; $("#banner_info").html($("#banner_list a").eq(i).find("img").attr('alt')); $("#banner_info").unbind().click(function(){window.open($("#banner_list a").eq(i).attr('href'), "_blank")}) $("#banner_list a").filter(":visible").fadeOut(500).parent().children().eq(i).fadeIn(1000); $(this).css({"background":"#be2424",'color':'#000'}).siblings().css({"background":"#6f4f67",'color':'#fff'}); }); t = setInterval("showAuto()", 4000); $("#banner").hover(function(){clearInterval(t)}, function(){t = setInterval("showAuto()", 4000);}); }) function showAuto() { n = n >=(count - 1) ? 0 : ++n; $("#banner li").eq(n).trigger('click'); }
focus_pic.js代码如下所示:
var foucsbox = function (time) { var time = time || 3500 , bigimgs = big.getElementsByTagName('li') , samllimgs = samll.getElementsByTagName('li') , imglink = tip.getElementsByTagName('a')[0] , slide = function (z) { samllimgs[lastIndex].className = ''; samllimgs[z].className = 'current'; bigimgs[lastIndex].style.display = 'none'; bigimgs[z].style.display = 'block'; try { imglink.innerHTML = samllimgs[z].getElementsByTagName('img')[0].alt; } catch (e) { imglink.innerText = samllimgs[z].firstChild.firstChild.alt; } lastIndex = i = z; } , helper = function (z) { return function (e) { var na; if (!e) { e = window.event; na = e.srcElement.nodeName; } else { na = e.target.nodeName; } if (na === 'IMG') { slide(z); } } } , lastIndex = i = 0, x, y = bigimgs.length , getPrevI = function (q) { return i - q < 0 ? y - q : i - 1; } , getNextI = function (q) { return i + q >= y ? i + q - y : i + 1; } try { imglink.innerText = samllimgs[0].getElementsByTagName('img')[0].alt; } catch (e) { imglink.innerText = samllimgs[0].firstChild.firstChild.alt; } for (x = 1; x < y; x += 1) { bigimgs[x].style.display = 'none'; } for (x = 0; x < y; x += 1) { samllimgs[x].onmouseover = helper(x); } topCon.children[2].onclick = function (e) { i = lastIndex; var t; if (!e) { e = window.event; t = e.srcElement; } else { t = e.target; } switch (t.className) { case 'icon_prev': slide(getPrevI(1)); break; case 'icon_next': slide(getNextI(1)); break; } }; topCon.onmouseover = function () { clearInterval(s); }; topCon.onmouseout = function () { s = setInterval(function () { slide(i); i = getNextI(1); }, time); }; }; var $ = function (id) { return document.getElementById(id); } , topCon = $('flower1') , big = $('focus_pic1') , samll = $('focus_list1') , tip = $('focus_title1') foucsbox(2500); var topCon = $('flower2') , big = $('focus_pic2') , samll = $('focus_list2') , tip = $('focus_title2') foucsbox(2500); var topCon = $('flower3') , big = $('focus_pic3') , samll = $('focus_list3') , tip = $('focus_title3') foucsbox(2500); var topCon = $('flower4') , big = $('focus_pic4') , samll = $('focus_list4') , tip = $('focus_title4') foucsbox(2500);
问题的原因在于var $ = function (id) { return document.getElementById(id); }
就是这段覆盖了jquery的工厂函数,解决办法有2个,
解决方法1:把这个块换个名字
var foucsbox = function (time) { var time = time || 3500 , bigimgs = big.getElementsByTagName('li') , samllimgs = samll.getElementsByTagName('li') , imglink = tip.getElementsByTagName('a')[0] , slide = function (z) { samllimgs[lastIndex].className = ''; samllimgs[z].className = 'current'; bigimgs[lastIndex].style.display = 'none'; bigimgs[z].style.display = 'block'; try { imglink.innerHTML = samllimgs[z].getElementsByTagName('img')[0].alt; } catch (e) { imglink.innerText = samllimgs[z].firstChild.firstChild.alt; } lastIndex = i = z; } , helper = function (z) { return function (e) { var na; if (!e) { e = window.event; na = e.srcElement.nodeName; } else { na = e.target.nodeName; } if (na === 'IMG') { slide(z); } } } , lastIndex = i = 0, x, y = bigimgs.length , getPrevI = function (q) { return i - q < 0 ? y - q : i - 1; } , getNextI = function (q) { return i + q >= y ? i + q - y : i + 1; } try { imglink.innerText = samllimgs[0].getElementsByTagName('img')[0].alt; } catch (e) { imglink.innerText = samllimgs[0].firstChild.firstChild.alt; } for (x = 1; x < y; x += 1) { bigimgs[x].style.display = 'none'; } for (x = 0; x < y; x += 1) { samllimgs[x].onmouseover = helper(x); } topCon.children[2].onclick = function (e) { i = lastIndex; var t; if (!e) { e = window.event; t = e.srcElement; } else { t = e.target; } switch (t.className) { case 'icon_prev': slide(getPrevI(1)); break; case 'icon_next': slide(getNextI(1)); break; } }; topCon.onmouseover = function () { clearInterval(s); }; topCon.onmouseout = function () { s = setInterval(function () { slide(i); i = getNextI(1); }, time); }; }; var byId = function (id) { return document.getElementById(id); } , topCon = byId('flower1') , big = byId('focus_pic1') , samll = byId('focus_list1') , tip = byId('focus_title1') foucsbox(2500); var topCon = byId('flower2') , big = byId('focus_pic2') , samll = byId('focus_list2') , tip = byId('focus_title2') foucsbox(2500); var topCon = byId('flower3') , big = byId('focus_pic3') , samll = byId('focus_list3') , tip = byId('focus_title3') foucsbox(2500); var topCon = byId('flower4') , big = byId('focus_pic4') , samll = byId('focus_list4') , tip = byId('focus_title4') foucsbox(2500);
解决方法2:由于js的变量作用域或作用范围是按函数来划分界限的,所以放在一个函数里边,把他执行一下。一般通俗的叫:立即执行函数。这样,这个内部$不会穿透,或影响到外边去。这是一种偷懒或省力的解决办法。但是这个方法的缺点是:要求的技术储备比较高,里边也有少量的坑。比如,即不让$穿透,还需要把里边的方法暴露给外边。这时候需要借助window,把方法绑定在window上面去。比如:window.method = method.
(function(window){ var $ = function(id) { return document.getElementById(id); }, topCon = $('flower1'), big = $('focus_pic1'), samll = $('focus_list1'), tip = $('focus_title1'); foucsbox(2500); var topCon = $('flower2'), big = $('focus_pic2'), samll = $('focus_list2'), tip = $('focus_title2'); foucsbox(2500); var topCon = $('flower3'), big = $('focus_pic3'), samll = $('focus_list3'), tip = $('focus_title3'); foucsbox(2500); var topCon = $('flower4'), big = $('focus_pic4'), samll = $('focus_list4'), tip = $('focus_title4'); foucsbox(2500); }(window))
以上方法就可以成功解决问题啦!感谢大神的指点,受益匪浅!前端的路,才刚刚开始,希望以后可以更多的发现问题,解决问题,分享经验!
学习笔记:调用js文件冲突问题解决方案的更多相关文章
- php中并发读写文件冲突的解决方案(文件锁应用示例)
PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适 ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- thinkphp学习笔记2—入口文件
原文:thinkphp学习笔记2-入口文件 在thinkphp中有两个入口文件,一个是项目的入口文件,是index.php在主目录里面,还有一个是thinkphp框架的的入口文件,放在框架目录下面如: ...
- matlab学习笔记5--低级文件输入输出函数
一起来学matlab-matlab学习笔记5 低级文件输入输出函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢张 ...
- 在winform中调用js文件并输出结果
在winform中调用js文件并输出结果默认分类 2007-10-19 16:35:06 阅读25 评论0 字号:大中小 由于项目需要在winform中调一个强大的js,所以把这个tip记录在此: 1 ...
- Windows phone 8 学习笔记(2) 数据文件操作
原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...
- [转]html页面调用js文件里的函数报错onclick is not defined处理方法
原文地址:http://blog.csdn.net/ywl570717586/article/details/53130863 今天处理html标签里的onclick功能的时候总是报错:Uncaugh ...
- iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (以后谁不会了,直接将连接给他)
iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (一有冲突要手把手教一遍,太麻烦了,现在总结下,以后谁不会了,连接直接发他). 关于xxx.xcodeproj 文件冲突的话,是比较 ...
- Python 调用JS文件中的函数
Python 调用JS文件中的函数 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r&q ...
随机推荐
- angular ui-router 缓存问题
在个别情况下 $state.go()路径和参数完全相同的时候页面因为缓存问题可以直接跳转,但是不能重新获取数据 通过路由参数可以解决 路由 .state('app.***.***', { url: ' ...
- BZOJ4415: [Shoi2013]发牌
显然可以线段树或树状数组上二分. 然而直接写splay在bzoj上并不会T. 然而发这题的目的只是因为我又忘了return了啊啊啊啊(TдT) 内心十分崩溃.关键是在本地还能过. #include&l ...
- 网摘 窗体的旋转效果 wpf
<Window x:Class="simplewpf.chuantixx" Name="DW1" xmlns="http://s ...
- easyUI文本框textbox笔记
知识点: 1.图标位置 Icon Align属性,有left和right两个: 2.textbox的setvalue方法,getvalue方法. <div style="margin: ...
- Windows7、8无法访问其他计算机共享盘
Windows7.8无法访问其他计算机共享盘 WIN7 访问共享的时候提示用户名和密码不正确,在XP系统上可以正常访问 一.win+r gpedit.msc 进行组策略如图所示 二.wind ...
- JavaScript学习笔记——DOM_对document对象的内容、属性、样式的操作
javascript-对文档对象的内容.属性.样式的操作 一.操作内容 1. innerHTML 用来设置或获取对象起始和结束标签内的内容(识别html标签) 2. innerText 用来设置或获取 ...
- Echarts 页面多图自适应的解决办法 (转)
项目中用到了echarts的多图表的 问题,如果设置了 window.onresize = option.chart.resize() 只能控制 某个图表的 自适应,如果要是页面上的图表都要自适应. ...
- js与php转换时间戳
php时间:1368524732 js代码: function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleStri ...
- imageserver
https://bitbucket.org/tamtam-nl/tamtam-nuget-imageserver/overview https://www.nuget.org/packages/Tam ...
- 安装docker管理工具rancher
http://blog.csdn.net/freewebsys/article/details/51136562 docker(2):安装docker管理工具rancher rancher是一个Doc ...