SOURCE

console 命令行工具 X clear

                    
>
console
/**
 * 中介者对象
 */
const Mediator = (function() {
  // 消息对象
  let _msg = {};
  return {
    /**
         * 订阅消息方法
         * @param type      消息名称
         * @param action    消息回调函数
         */
    register(type, action) {
      // 如果消息存在
      if (_msg[type]) {
        // 存入回调函数
        _msg[type].push(action);
      } else {
        // 不存在,则建立该消息容器
        _msg[type] = [action];
      }
    },
    /**
         * 发布消息方法
         * @param type      消息名称
         */
    send(type) {
      // 如果该消息已经被订阅
      if (_msg[type]) {
        // 遍历已存储的消息回调函数
        for (let i = 0, len = _msg[type].length; i < len; i++) {
          // 执行该回调函数
          _msg[type][i] && _msg[type][i]();
        }
      }
    }
  }
})();

/**
 * 显示导航小组件
 * @param modId               模块
 * @param tagName               处理的标签(消息提醒b,网址span)
 * @param showOrHide        显示还是隐藏
 */
function showHideNavWidget(modId, tagName, showOrHide) {
  // 获取导航模块
  const mod = document.getElementById(modId);
  // 获取下面的标签名为tag的元素
  const tags = mod.getElementsByTagName(tagName);
  const show = (!showOrHide || showOrHide === 'hide') ? 'hidden': 'visible';
  // 占位隐藏这些标签
  for (let i = 0, len = tags.length; i < len; i++) {
    tags[i].style.visibility = show;
  }
}

// 用户收藏导航模块
// 有消息提醒和导航网址功能
(function() {
  // 订阅隐藏用户收藏导航消息提醒消息
  Mediator.register('hideAllNavNum', () => {
    showHideNavWidget('collectionNav', 'b', false);
  });
  // 订阅显示用户收藏导航消息提醒消息
  Mediator.register('showAllNavNum', () => {
    showHideNavWidget('collectionNav', 'b', true);
  });
  // 订阅隐藏用户收藏导航消息提醒消息
  Mediator.register('hideAllNavUrl', () => {
    showHideNavWidget('collectionNav', 'span', false);
  });
  // 订阅显示用户收藏导航消息提醒消息
  Mediator.register('showAllNavUrl', () => {
    showHideNavWidget('collectionNav', 'span', true);
  });
})();

// 推荐用户导航
// 推荐用户导航内的导航有消息提醒功能
(function() {
  // 订阅隐藏推荐用户导航消息提醒消息
  Mediator.register('hideAllNavNum', () => {
    showHideNavWidget('recommendNav', 'b', false);
  });
  // 订阅显示推荐用户导航消息提醒消息
  Mediator.register('showAllNavNum', () => {
    showHideNavWidget('recommendNav', 'b', true);
  });
})();

// 最近常用导航
// 最近常用导航栏内有导航网址功能
(function() {
  // 订阅隐藏最近常用导航消息
  Mediator.register('hideAllNavUrl', () => {
    showHideNavWidget('recentlyNav', 'span', 'hide');
  });
  // 订阅显示最近常用导航消息
  Mediator.register('showAllNavUrl', () => {
    showHideNavWidget('recentlyNav', 'span', 'show');
  });
})();

// 设置层模块
(function() {
  // 消息提醒选框
  const hideNum = document.getElementById('hideNum');
  //  网址选框
  const hideUrl = document.getElementById('hideUrl');

  // 消息提醒选框事件
  hideNum.addEventListener('change', function() {
    if (this.checked) {
      // 中介者发布隐藏消息提醒功能消息
      Mediator.send('hideAllNavNum');
    } else {
      // 中介者发布隐藏消息提醒功能消息
      Mediator.send('showAllNavNum');
    }
  },
  false);
  // 网址选框事件
  hideUrl.addEventListener('change', function() {
    if (hideUrl.checked) {
      // 中介者发布隐藏所有网址功能消息
      Mediator.send('hideAllNavUrl');
    } else {
      // 中介者发布显示所有网址功能消息
      Mediator.send('showAllNavUrl');
    }
  },
  false);
})();
<article class="flex-box">
  <section id="collectionNav">
    <header>
      <hgroup>
        <h1>
          用户收藏导航模块
        </h1>
        <h2>
          有消息提醒和导航网址功能
        </h2>
      </hgroup>
    </header>
    <section>
      <b>
        消息1
      </b>
      <b>
        消息2
      </b>
      <b>
        消息3
      </b>
    </section>
    <section>
      <span>
        导航1
      </span>
      <span>
        导航2
      </span>
      <span>
        导航3
      </span>
    </section>
  </section>
  <section id="recommendNav">
    <hgroup>
      <h1>
        推荐用户导航
      </h1>
      <h2>
        推荐用户导航内的导航有消息提醒功能
      </h2>
    </hgroup>
    <section>
      <b>
        消息4
      </b>
      <b>
        消息5
      </b>
      <b>
        消息6
      </b>
    </section>
  </section>
  <section id="recentlyNav">
    <hgroup>
      <h1>
        最近常用导航
      </h1>
      <h2>
        最近常用导航栏内有导航网址功能
      </h2>
    </hgroup>
    <section>
      <span>
        导航4
      </span>
      <span>
        导航5
      </span>
      <span>
        导航6
      </span>
    </section>
  </section>
</article>
<section class="center">
  <p>
    <input type="checkbox" id="hideNum">
    隐藏消息
  </p>
  <p>
    <input type="checkbox" id="hideUrl">
    隐藏导航
  </p>
</section>
.flex-box {
   display: flex;
   justify-content: space-around;
 }
 
 h1 {
   font-size: 20px;
   color: rgba(0, 0, 0, 1);
 }
 
 h2 {
   font-size: 16px;
   color: rgba(0, 0, 0, .4);
 }
 
 b {
   font-size: 16px;
   color: rgba(0, 0, 0, .9);
   font-weight: 100;
 }
 
 span {
   font-size: 16px;
   color: rgba(0, 0, 0, .9);
 }
 
 .center {
   margin: 30px auto;
   text-align: center;
 }