6-24 9,307 views
最近偶尔接过来一些小型网站修改,会看到这种画面
- //user.js
- (function(){
- //page1
- $('.dom1').click(function(){
- //some js code
- }.mouseover(function(){
- //some js code
- })
- $('#dom2').click(function(){
- //some js code
- }
- //page2
- $('#dom3').click(function(){
- //some js code
- }
- //...
- //page3
- $('.dom4').click(function(){
- //some js code
- }
- )
以上仅仅是精简版,实际的要乱很多很多,而且夹杂着好多变量,篇幅问题不贴出来
我发现有些接触前端不久的人会:
1.在某个js文件下,直接绑定几乎所有页面的所有事件
2.添加事件的时候,随便找个位置例如末尾添加自己的代码
在页面少的时候还好,页面多的时候会很乱,不谈冲突之类的问题,阅读的时候肯定会看得很烦,维护也比较浪费时间。
这里分享一个我目前写多页面站点用到的公共js文件示例,希望能让有需要的人学习一下
上面说的代码可以用如下写法替代:
- $(function () {
- var pageConfig = {
- _events: [],
- push: function (page) {
- this._events.push(page);
- return this;
- },
- _bind: function (page) {
- var events = page.events || {};
- var container = page.container || $(document);
- //绑定模板事件
- for (var ele in events) {
- for (var eventType in events[ele]) {
- container.on(eventType, ele, events[ele][eventType]);
- }
- }
- page.isBind = true;
- },
- init: function(){
- for(var i = 0,len = this._events.length;i<len;i++){
- if(!this._events[i].isBind){
- this._bind(this._events[i]);
- }
- }
- },
- }
- //每一个页面的事件用一个对象存储
- var page1 = {
- container: $(".page1"),
- events: {
- '.dom1':{
- click:function(){
- //some js code
- },
- mouseover:function(){
- //some js code
- }
- },
- '#dom2':{
- click:function(){
- //some js code
- }
- }
- }
- }
- var page2 = {
- container: $(".page2"),
- events: {
- '#dom3':{
- click:function(){
- //some js code
- }
- }
- //...
- }
- }
- var page3 = {
- container: $(".page3"),
- events: {
- '.dom4':{
- click:function(){
- //some js code
- }
- }
- }
- }
- //需要哪一个页面绑定事件,就push相应的对象
- pageManager.push(page1)
- .push(page2)
- .push(page3)
- .init();
- //亦可只push当前页的的事件对象,例如在page1中加如下js
- //pageManager.push(page1).init();
- });
以上写法仅建议在多页面站点使用,在单页面或页面少的例如H5页不作参考。
虽然,理解大概的思路,但是。。。还是希望有具体的事件来讲解一下。
代码比较少,不知道讲解哪里。。。下面是我测试时的两个页面
http://wx.karlew.com/bink/page1.html
http://wx.karlew.com/bink/page2.html
包含了同样ID的元素,但js用上面方法触发不一样的事件处理,你可以看下