zoukankan      html  css  js  c++  java
  • 电子商务系统的设计与实现(十四):菜单高亮

        菜单高亮,几乎是所有Web网站都需要的一个功能。

       这个功能,说起来,简单得很,给当前页面的菜单增加一个高亮样式,删除其它菜单的高亮样式。

       如果只高亮1个页面的菜单, 太简单了,但是如果菜单和页面比较多,就产生了争议。

       第1种方式:每个页面单独高亮。
      
    <li id="indexli"><a href="${base}/">首页</a></li>
        <script type="text/javascript">
    	function highlightIndex() {
    		highlight("indexli");
    	}	
          function highlight(id) {
    		$("#" + id).addClass("liactive");
    	}
    </script> 



       好处:灵活性非常强。
       坏处:每个页面都需要增加一个高亮菜单的方法。

    第2种方式:通过匹配URL, 只写一个高亮菜单的方法。
            
         var url = window.location.pathname;
    		//默认为‘首页’index
    		var current = 'index';
    		if (url.indexOf('/service') != -1) {
    			current = 'service';
    		} else if (url.indexOf('/case') != -1) {
    			current = 'case';
    		} else if (url.indexOf('/article') != -1) {
    			current = 'article';
    		} else if (url.indexOf('/code') != -1) {
    			current = 'code';
    		} else if (url.indexOf('/about') != -1) {
    			current = 'more';
    		} else if (url.indexOf('/news') != -1) {
    			current = 'more';
    		} else if (url.indexOf('/help') != -1) {
    			current = 'more';
    		} else if (url.indexOf('/ask') != -1) {
    			current = 'ask';
    		} else {
    			current = 'index';
    		}
    		for (var i = 0; i < navList.length; i++) {
    			if (i == map[current]) {
    				navList[i].className = 'liactive';
    			} else {
    				navList[i].className = '';
    			}
    		} 


    好处:菜单高亮逻辑处理,都在一个地方。
    坏处:灵活性很差,对URL有比较严格的要求。
    简单说就是,URL的规则越简单越统一,匹配越简单。但是URL如果有例外的情况,就必须做特别处理。
    当再增加一个URL的时候,需要考虑新增的URL和已有的URL匹配规则是否产生冲突。

    -----------------------------------------------------------
    上述2种方法我都用过,说说我的感受。
    如果URL比较随意,就在每个具体的页面单独调用高亮函数。
    如果URL非常统一,可以统一处理。

    在实际过程中,比如公司的项目中,关于采用哪种方式就产生了争议,前端希望统一处理,后端倾向于单独定制。
    后端开发过程中,url比较随意。前端希望后端把url规范命名,按照菜单的组织来定义url。
    而boss则不愿意这么做,他认为菜单和后端url并不需要严格统一,菜单和后端业务不应该有过强的依赖。

    就我们公司的项目和我自己的项目,我更倾向于每个页面单独调用高亮函数,非常灵活。
    有的页面,只需要高亮最顶层菜单,有的页面,还需要高亮左侧的菜单。

    至于高亮菜单的逻辑,可以封装成方法。

    无论你增加了多少页面,每个页面的高亮,都不会互相影响。
    -----------------------------------------------------------
    再吐槽几句,封装菜单逻辑,每个页面调用一次高亮函数,分分钟就搞定的事情。非要去写统一的URL匹配,花费个把小时,还不能保证完全正确,并且, URL匹配也不能在多个项目之间复用。

    团队开发就经常存在这么类似的很多问题, 导致开发效率非常低。

    so,我认为,一个优秀的全栈式开发工程师,和5个人的小团队开发效率差不多。 
  • 相关阅读:
    SmartTimer——一种基于STM32的轻量级时钟调度器
    Python2/3中的urllib库
    Python 解析构建数据大杂烩 -- csv、xml、json、excel
    Python2/3 中执行外部命令(Linux)和程序(exe) -- 子进程模块 subprocess
    Python 中的命令行参数处理 -- argparse、optparse、getopt
    Linux 定时循环执行 python 脚本
    Python2/3的中、英文字符编码与解码输出: UnicodeDecodeError: 'ascii' codec can't decode/encode
    在windows下使用Qt5开发GTK3图形界面应用程序
    qt编译的基于xlib cairo的桌面程序
    debian安装dwm窗口管理器
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462929.html
Copyright © 2011-2022 走看看