WEB无限级菜单

合集下载

两天时间用AJAX写了个无限级的多级联动菜单(ajax+PHP构架)

两天时间用AJAX写了个无限级的多级联动菜单(ajax+PHP构架)

花了两天时间。

研究AJAX,终于独立完成一个无限组的多级菜单联动功能。

主要特点:就是HTML静态页面可以无刷新的与PHP动态角本文件及数据库交互(这也是AJAX的核心目的)。

以下把代码贴出来。

供大家参考指正:ajax.js文件(位于根目录下js子目录)var xmlHttp;function createXmlHttp(){if(window.XMLHttpRequest){xmlHttp=new XMLHttpRequest();}else{xmlHttp=new ActiveXObject("Microsoft.XMLHttp");}}basic_inc.php(位于根目录下/include子目录下)<?php$DB_SERVER="localhost";$DB_NAME="ajax";$DB_USER="root";$DB_PASSWORD="";?>conn.php(位于根目录下/include子目录下)<?phprequire_once("dir_inc.php");require_once($ROOT_DIR."include/basic_inc.php");@ $db=mysql_connect($DB_SERVER,$DB_USER) or die ("faile!".mysql_error());@mysql_select_db($DB_NAME);?>dir_inc.php(位于根目标下/include子目录下)<?php$ROOT_DIR="../";?>select_menu.html(位于根目录下是核心前台文件)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>select_menu</title><script type="text/javascript" src="js/ajax.js">//这里引用创建xmlHttp对像的文件(对浏览器做过判断)</script><script type="text/javascript">var targetSelId; //申明一个全局变量用来存放当前要操作的对像的IDvar selArray;//申明一个全局数组。

08商品分类无限极分类

08商品分类无限极分类

回顾验证码:要借助GD库1.创建画布:imagecreatetruecolor2.填充背景颜色分配颜色:imagecolorallocate填充:imagefill3.获取验证码内容4.将验证码写入图片写入字母:imagestring中文字符:imagettftext5.增加干扰线:imageline6.增加干扰点:imagesetpixel7.保存图片输出:header配合imagepng保存:imagepng,两个参数8.销毁资源:imagedestroyshop商品分类创建商品分类数据库信息1.创建商品分类表2.插入数据商品分类完完全全属于一个单独的功能,不依赖其他功能存在,所以应该单独的新建一个文件来处理所有跟商品分类相关的操作(增删改查)。

在业务逻辑处理的时候,如果涉及到要操作数据库,那么应该交由对应的类来处理(类是继承自DB类)。

1.创建商品分类的处理文件。

/admin/category.php2.加载公共文件。

3.获取用户的操作动作。

4.判断用户动作,并进行处理。

查看商品分类列表1.修改菜单连接,使得用户点击商品分类菜单能够进入到商品分类列表界面。

/admin/templates/menu.html2.处理用户的list请求。

/admin/category.php?act=list3.为商品分类增加一个能够操作数据库的类。

/includes/Category.class.php4.获取所有的商品分类并显示。

/admin/cateogry.php?act=list5.实现getAllCategories方法。

/includes/Category.class.php6.在模板中显示数据。

/admin/templates/category_list.html以上能够显示所有数据,但是问题是没有按照分类的父子关系显示,也没有缩进效果。

无限级分类通过顶级找到子级,然后子级再找出所有的子级,类推,知道找完所有的子级之后,在回到上一层再找对应的子级。

基于SiteServerCMS网页动态菜单制作的实现

基于SiteServerCMS网页动态菜单制作的实现

基于SiteServerCMS网页动态菜单制作的实现摘要:目前很多网站的主要栏目都采用了菜单形式来显示,得到了非常不错的效果。

但是对于菜单后期的维护和更新,让很多网站管理员非常头痛,要重新设置菜单名或添加删除菜单项不易实现,需要掌握html、javascript等专业知识来修改网页代码才能实现,不是很简单。

而网站管理员大部分都是网页制作的门外汉,要想快速地修改菜单名或添加删除菜单项则是一个比较困难的事。

本文介绍基于siteservercms网页动态菜单的制作,使网站管理员在后期方便的维护和更新菜单变得轻松自如,不再是一件难事。

关键词:菜单;cms;stl中图分类号:tp393.02导航是网页中非常重要的一项功能,各式各样的网站都要用到导航菜单,便于用户了解整个网站的内容结构,有选择性地浏览自己所需要的内容。

当网站内容比较丰富,结构比较复杂的时候,下拉菜单是网页上最常见的效果之一,用鼠标轻轻一点或是移过去,就出现一个更加详细的子菜单,它不仅节省了网页排版上的空间,而且使网页布局简洁有序。

如果能够对这样的下拉菜单动态生成,并能菜单项进行增加、修改和删除等管理,这为网页增色不少。

介绍通过div+css和stl语言编程相结合实现动态菜单的方法。

1 div+css制作菜单模板设计过程是首先定义菜单的html结构,然后利用css设置样式,最络实现当鼠标经过主菜单项时相应的子菜单打开,鼠标离开时子菜单关闭的效果。

菜单的整体结构采用html文档的无序列表,通过标记和标记来实现。

首标记和尾标记这间是无序列表的内容,首标记和尾标记之间是列表项的内容。

对于菜单ul和li的外层结构,首先进行常规设置,包括列表高度、背景、文字对齐方式等属性的设置。

2 通过sitesevercms建立菜单项为了后期方便网站管理员利用sitesevercms内容管理系统进行菜单的管理和维护,实现菜单动态变化,我们利用sitesevercms 内容管理系统的栏目组进管理主导航菜单,具体操作如下:2.1 添加栏目组点击系统左侧菜单“信息管理”“归类管理”“栏目组管理”进入管理界面,点击“添加内容组”,选择添加栏目组,单击确定完成“主导航”栏目组的添加。

element中el-menu组件的无限极循环思路代码详解

element中el-menu组件的无限极循环思路代码详解

element中el-menu组件的⽆限极循环思路代码详解实现思路主要组件嵌套(组件⾃⼰调⽤⾃⼰) 下⾯是组件所需要的数据{"code": 1,"data": {"menuVoList": [{"childList": [{"childList": [],"menu": {"createBy": "0-1","createTime": 1587610158,"id": "2f006aed6a114579bd8b9809724428f7","name": "系统⽤户权限管理","parentId": "6d68079a16b94292990f612237bd048e","path": "/userallotrole","updateBy": "0-1","updateTime": 1587610221}},{"childList": [],"menu": {"createBy": "0-1","createTime": 1587605059,"id": "c948265cdf27420eb7b6b502292c5990","name": "系统⽤户管理","parentId": "6d68079a16b94292990f612237bd048e","path": "/user","updateBy": "0-1","updateTime": 1587610230}}],"menu": {"createBy": "0-1","createTime": 1587605025,"id": "6d68079a16b94292990f612237bd048e","name": "⽤户管理","parentId": "","path": "/#","updateBy": "0-1","updateTime": 1587610117}},{"childList": [{"childList": [],"menu": {"createBy": "0-1","createTime": 1587469457,"id": "d4b70897052742bb860cf14cea8cf131","name": "新建/修改菜单","parentId": "82e5ca1ab2e04d8faffeb973286771ec","path": "/newMenu","updateBy": "0-1","updateTime": 1587469457}}],"menu": {"createBy": "0-1","createTime": 1587469385,"id": "82e5ca1ab2e04d8faffeb973286771ec","name": "菜单管理","parentId": "","path": "","updateBy": "0-1","updateTime": 1587469426}},{"childList": [{"childList": [],"menu": {"createBy": "0-1","createTime": 1587468494,"id": "3a092edd120d40b79322d8486e53e5a1","name": "系统⾓⾊管理","parentId": "ce5704f647d341fe8334ad12c6dd4a6b","path": "/setrole","updateBy": "0-1","updateTime": 1587469340}},{"childList": [],"menu": {"createBy": "0-1","createTime": 1587469360,"id": "61d0e4fecbed407d89b1ea5878072374","name": "设置⾓⾊权限","parentId": "ce5704f647d341fe8334ad12c6dd4a6b","path": "/authorization","updateBy": "0-1","updateTime": 1587469360}},{"childList": [],"menu": {"createBy": "0-1","createTime": 1587469520,"id": "a1a2f6bcbfba4a7f9178ef03ea0fe5b0","name": "权限管理","parentId": "ce5704f647d341fe8334ad12c6dd4a6b","path": "/resource","updateBy": "0-1","updateTime": 1587624251}}],"menu": {"createBy": "0-1","createTime": 1587468417,"id": "ce5704f647d341fe8334ad12c6dd4a6b","name": "⾓⾊管理","parentId": "","path": "","updateBy": "0-1","updateTime": 1587468417}}]},"message": "成功"} 现在我们来设置组件(在 componet ⽂件夹⾥⾯建⼀个 menu.vue)代码如下<template><div><template v-for="value in menuData"><el-submenu v-if="value.childList.length > '0'" :index=""> //判断传进来的数据中 childList 数组length 是否⼤于零,如果⼤于零表⽰不是不需要在循环下去了 <template slot="title"><i class="el-icon-s-tools" /><span slot="title">{{ }}</span></template><MenuTree :menu-data="value.childList" /></el-submenu><el-menu-item v-else :index="value.menu.path"><span slot="title">{{ }}</span></el-menu-item></template></div></template><script>export default {name: 'MenuTree',props: ['menuData']}</script><style lang="scss" >.el-submenu__title i {color: #fff;}.el-menu--collapse {width: 54px;}</style> 接下来在需要使⽤ menu 组件的地⽅引⼊刚才定义的组件<template><el-menuclass="el-menu-vertical-demo":collapse="isCollapse"background-color="#4A5A74"active-text-color="#ffd04b"text-color="#fff":unique-opened="true":default-active="this.$route.path"@select="handleSelect"><menuTree :menu-data="list" /></el-menu></template>import menuTree from '@/component/menu'export default{components: {menuTree},data: {list: []},methods: {getMenuList({}).then(res => { //我这⾥是请求后台得来得数据,没有数据直接⽤我上⾯得数据,不过得像我下⾯这样处理if (res.status === 200) {this.list = res.data.data.menuVoList}})}} 这样,em-menu 组件的⽆限极循环便实现了,注意,我上⾯代码中 el-menu 的属性可能多了⼀些,请根据⾃⼰需要删除到此这篇关于element 中 el-menu 组件的⽆限极循环的⽂章就介绍到这了,更多相关el-menu 组件⽆限极循环内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

php实现菜单无限极分类

php实现菜单无限极分类

php实现菜单⽆限极分类⼀、数据表结构CREATE TABLE `t_admin_privilege` (`f_id` int(11) NOT NULL AUTO_INCREMENT,`f_name` varchar(50) DEFAULT NULL COMMENT '⽬录名称',`f_parent_id` int(11) DEFAULT '0' COMMENT '⽗级id',`f_type` tinyint(4) DEFAULT NULL COMMENT '第⼏级⽬录',`f_url` varchar(255) DEFAULT NULL COMMENT '⽬录的链接地址',`f_createtime` int(10) DEFAULT NULL COMMENT '创建时间',`f_is_menu` tinyint(1) DEFAULT '1' COMMENT '1是菜单栏 2不是菜单栏',`f_icon` varchar(50) DEFAULT NULL COMMENT '⼩图标',`f_is_del` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否删除 1正在使⽤(未删除) 2删除',`f_sort` tinyint(5) DEFAULT NULL COMMENT '排序',PRIMARY KEY (`f_id`)) ENGINE=InnoDB AUTO_INCREMENT=335 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT⼆、后台取数据(使⽤Yii框架)header("content-type:text/html;charset=utf-8"); //避免提⽰中⽂乱码$html = array();//获取菜单栏所有的数据$menu_record = T_admin_privilege::model()->findAll();$EData = new EData();$html['menu_list'] = $EData->push_info($menu_record);//1级⽬录$criteria_first = new CDbCriteria();$criteria_first->addCondition("f_type=1 AND f_is_menu=1 AND f_is_del=1");$criteria_first->order="f_id";//2级⽬录$criteria_second = new CDbCriteria();$criteria_second->addCondition("f_type=2 AND f_is_menu=1 AND f_is_del=1");$criteria_second->order="f_id";//3级⽬录$criteria_third = new CDbCriteria();$criteria_third->addCondition("f_type=3 AND f_is_menu=1 AND f_is_del=1");$criteria_third->order="f_id";//4级⽬录$criteria_fourth = new CDbCriteria();$criteria_fourth->addCondition("f_type=4 AND f_is_menu=1 AND f_is_del=1");$criteria_fourth->order="f_id";$menu_array = array();//菜单分为4级$first_list = T_admin_privilege::model()->findAll($criteria_first);$html['first_num'] = $first_num = count($first_list);$second_list = T_admin_privilege::model()->findAll($criteria_second);$html['second_num'] = $second_num = count($second_list);$third_list = T_admin_privilege::model()->findAll($criteria_third);$html['third_num'] = $third_num = count($third_list);$fourth_list = T_admin_privilege::model()->findAll($criteria_fourth);$html['fourth_num'] = $third_num = count($fourth_list);//⼀级⽬录foreach ($first_list as$first){$menu_array[$first->f_id] = array();}//⼆级⽬录foreach ($second_list as$second){$menu_array[$second->f_parent_id][$second->f_id] = array();}//三级⽬录foreach ($third_list as$third){foreach ($menu_array as$first_k => $menu){foreach ($menu as$second_k => $next){if ($second_k == $third->f_parent_id){$menu_array[$first_k][$second_k][$third->f_id] = array();}}}}//四级⽬录foreach ($fourth_list as$fourth){foreach ($menu_array as$first_k=>$second_menu){foreach ($second_menu as$second_k => $third_menu){foreach ($third_menu as$third_k => $firth_menu){if ($third_k == $fourth->f_parent_id){$menu_array[$first_k][$second_k][$third_k][$fourth->f_id] = 0;}}}}}$html['menu_array'] = $menu_array;//把数据单独放在⼀个页⾯,通过ajax加载$out = array('error' => 0,'content' => $this->renderPartial("ajax_get_menu_list_page", $html, true));echo CJSON::encode($out);三、html页⾯(ajax_get_menu_list_page页⾯,在pixed-admin框架下,也可引⼊jQuery,bootstrap修改样式)<div class="col-sm-12 menu_list" id="menu_list"><!--遍历⼀级⽬录 start--><?php foreach ($menu_array as $k=>$first_menu){?><div class="first_menu_list"><div class="first_menu menu"><?php if(count($first_menu)>0) {?><a href='javascript:;' class="is_show" f_id="<?php echo $menu_list[$k]['f_id'];?>">+</a><?php }else{?><i style="padding: 0 9px"></i><?php }?><input type="text" class="first_title title" name="first_title" value="<?php echo $menu_list[$k]['f_name']?>" f_id="<?php echo $menu_list[$k]['f_id'];?>" f_parent_id="0"><?php if(count($first_menu)<1) {?><input type="text" placeholder="请填写⽬录的路径地址" f_id="<?php echo $menu_list[$k]['f_id']?>" value="<?php echo $menu_list[$k]['f_url']?>" class="path_address"<div class="operation"><?php if (empty($menu_list[$k]['f_url']) ){?><a class="btn btn-xs btn-add second_add">添加</a><?php }?><?php if (count($first_menu)<=1){?><a class="btn btn-xs btn-del del first_del" f_id="<?php echo $menu_list[$k]['f_id']?>">删除</a><?php }?></div></div><!--遍历⼆级⽬录 start--><?php if(count($first_menu)>0){foreach ($first_menu as $first_k=>$second_menu){?><div class="second_menu_list <?php echo $menu_list[$first_k]['f_parent_id'];?>"><div class="second_menu menu"><input type="text" class="second_title title" name="second_title" value="<?php echo $menu_list[$first_k]['f_name']?>" f_id="<?php echo $menu_list[$first_k]['f_id'];?>" f_parent_id="<?php echo $menu_list[ <?php if(count($second_menu)<1) {?><input type="text" placeholder="请填写⽬录的路径地址" f_id="<?php echo $menu_list[$first_k]['f_id']?>" value="<?php echo $menu_list[$first_k]['f_url']?>"<div class="operation"><?php if(empty($menu_list[$first_k]['f_url'])) {?><a class="btn btn-xs btn-add third_add">添加</a><?php }?><?php if (count($second_menu)<=1){?><a class="btn btn-xs btn-del del second_del" f_id="<?php echo $menu_list[$first_k]['f_id']?>">删除</a><?php }?></div></div><!--遍历三级⽬录 start--><?php if (count($second_menu)>0){foreach ($second_menu as $second_k=>$third_menu){?><div class="third_menu_list"><div class="third_menu menu"><input type="text" class="third_title title" name="third_title" value="<?php echo $menu_list[$second_k]['f_name']?>" f_id="<?php echo $menu_list[$second_k]['f_id']?>" f_parent_id="<?php echo $menu <?php if(count($third_menu)<1) {?><input type="text" placeholder="请填写⽬录的路径地址" f_id="<?php echo $menu_list[$second_k]['f_id']?>" value="<?php echo $menu_list[$second_k]['f_url']?>"<div class="operation"><?php if(count($third_menu)>1) {?><a class="btn btn-xs btn-add fourth_add">添加</a><?php }?><?php if (count($third_menu)<=1){?><a class="btn btn-xs btn-del del third_del" f_id="<?php echo $menu_list[$second_k]['f_id']?>">删除</a><?php }?></div></div><!--遍历四级⽬录 start--><?php if (count($third_menu)>0){foreach ($third_menu as $third_k=>$fourth_menu){?><div class="fourth_menu menu"><input type="text" class="fourth_title title" name="fourth_title" value="<?php echo $menu_list[$third_k]['f_name']?>" f_id="<?php echo $menu_list[$third_k]['f_id']?>" f_parent_id="<?php echo $menu<input type="text" placeholder="请填写⽬录的路径地址" f_id="<?php echo $menu_list[$third_k]['f_id']?>" value="<?php echo $menu_list[$third_k]['f_url']?>" class="path_address"/><div class="operation"><a class="btn btn-xs btn-del del fourth_del" f_id="<?php echo $menu_list[$third_k]['f_id']?>">删除</a></div></div><?php }}?><!--遍历四级⽬录 end--></div><?php }}?><!--遍历三级⽬录 end--></div><?php }}?><!--遍历⼆级⽬录 end--></div><?php }?><!--遍历⼀级⽬录 end--></div>四、html页⾯(menu_list_page页⾯,在pixed-admin框架下,也可引⼊jQuery,bootstrap修改样式)、<div class="page-body"><div class="panel"><div class="form-group " id="get_menu_list"></div></div></div>五、css样式 *{margin: 0;padding: 0;}.add {margin-right: 10px;}.menu_list { margin:0px 20px 40px 20px;position: relative}.menu { height: 25px;}.first_menu {font-weight: bolder; font-size: 20px;margin:30px 15px 0px 15px;}.second_menu { padding: 25px 45px; font-weight: bold; font-size: 16px;}.third_menu { padding: 20px 0px 20px 90px;font-size: 14px;}.fourth_menu{padding: 20px 135px;}input {padding-left: 10px;border: none;margin-right: 30px;}.manual_content { width:450px;}.manual_content::after{content: '';}.manual_content a{float: right;margin-right: 10px;}.manual_content a:active::after{content: '';}.ui-accordion-header{border: none;}.ui-accordion-header.ui-state-active:after{content:""}a{display: inline-block}a:link{text-decoration: none}a:active{text-decoration: none}a:visited{text-decoration: none}a:hover{text-decoration: none}/*.second_menu_list{display: none}*/.is_show{font-size: 30px;}.menu_list{padding-right: 60px;}.btn-del,.btn-add{margin: -30px 10px 0 10px;}.btn-add{position: absolute; right:35%;}.btn-del{position:absolute;right: 30%;}.menu .path_address{font-size: 14px;width:400px;margin-left: 30px;font-weight: normal}六、js//通过ajax,把数据加载到menu_list_page页⾯$.ajax({url : '/system/ajax_get_menu_list_page',type : 'post',async : false,data : {},dataType : 'json',success : function(res){if( res.error == 0){$("#get_menu_list").prepend(res.content);}else{}}});//添加其他⽅法动态实现⽬录的增删改查。

magnolia管理页面

magnolia管理页面

在 AdminCentral 中的管理页面有关页工作区网站允许您管理您的网页,创建新的页面,编辑当前的和执行所有操作相关的任务,是要管理和构建您的网站。

当您登录到玉兰、AdminCentral的工作区网站,默认打开。

要访问本网站工作区中,如果尚未打开,请单击网站按钮在窗口左边的导航窗格中。

蓝色的导航按钮指示当前工作区中,而非活动的工作区按钮是绿色.工作区区工作区区的网站工作区包含五列:∙页:页面名称的每个 web 页;∙标题:标题的每个 web 页;∙状态:状态指示灯显示是否已激活 web 页,即发布到一个公共的实例;∙模板: web 页依据;该模板的名称∙Mod。

日期:对 web 页面上次修改的日期。

这些元素被称为网页元素,在各个部分中讨论。

命令栏命令栏,其中包含主的命令,位于工作区的底部。

您可以使用任何命令栏中只需单击它们。

新的一页和刷新命令总是处于活动状态,而打开的页面,此页面激活和应命令是特定的页,并当活动和清晰可见时,才选择的页。

选中任何页面后,他们都是透明的并不起作用。

要选择页面,单击任何页面元素在页面行和蓝色矩形将突出显示行,指示它已被选中。

命令的使用被讨论中的各个部分。

命令菜单通过用鼠标右键单击访问命令菜单。

所有的命令显示在命令菜单中,而只有主要的命令在命令栏中显示.命令菜单中,右键单击任何地方访问工作区,并在菜单中将出现。

当选择一个特定的页面时,所有的命令处于活动状态并清晰可见。

如果不选择了任何页面,只是新的一页、导出到 xml 树和从 xml 导入命令是积极和清晰可见。

所有其他的命令是特定于页和页处于选中状态时才能正常工作。

使用命令的大多数被讨论中的各个部分。

导出到 xml 树和从 xml 导入命令,超出了本手册的范围并不处理在这里。

搜索框玉兰已内置搜索功能,使您可以通过您的页面内容的搜索。

搜索框位于工作区的右下角。

搜索功能可用于查找您的网页和功能中的特定内容完全相同的方式在大多数别人一样,你可能已有熟悉,;谷歌搜索,是最著名的例子。

JS实现无限级网页折叠菜单(类似树形菜单)效果代码

JS实现无限级网页折叠菜单(类似树形菜单)效果代码

JS实现⽆限级⽹页折叠菜单(类似树形菜单)效果代码本⽂实例讲述了JS实现⽆限级⽹页折叠菜单(类似树形菜单)效果代码。

分享给⼤家供⼤家参考。

具体如下:这是⼀款超不错的⽹页折叠菜单,采⽤JavaScript实现。

折叠菜单是⼤家⽐较常见到的⼀种菜单形式,可⼴泛应⽤于管理系统、后台左侧、产品列表中,本折叠菜单有点树形菜单的味道,相信“⽆限级”会满⾜你的要求。

运⾏效果截图如下:在线演⽰地址如下:具体代码如下:<html><head><title>⽆限级折叠菜单JS版</title><style><!--body,ul,h3 {margin:0px; padding:0px;}li {list-style-type:none;}body{font-size:12px;color:#333;font-family: Simsun;line-height:15px;}a{text-decoration:none;color:#004285;border:none;}a:hover{text-decoration:none;color:#C33;}#menu {width:260px;margin:50px auto;padding:10px;border:#EEE 1px solid;}#menu h3 {font-size:12px;}#menu ul {background:url("images/ul-bg.gif") repeat-y 5px 0px; overflow:hidden;}#menu ul li {padding:5px 0 2px 15px;background:url("images/tree-ul-li.gif") no-repeat 5px -32px;}#menu ul li ul {display:none;}#menu ul li em {cursor:pointer;display:inline-block;width:15px;float:left;height:15px;margin-left:-14px;background:url("images/tree-ul-li.gif") no-repeat -32px 2px;}#menu ul li em.off {background-position: -17px -18px;}#menu ul li#end {background-color:#FFF;}#menu ul.off {display:block;}--></style></head><body><div id="menu"><h3>⽆限级折叠菜单JavaScript版</h3><ul><li><em></em><a href='javascript:void(0);'>菜单_1_1</a><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_3_2</a> <ul><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_2_2</a> <ul><li><em></em><a href='javascript:void(0);'>菜单_3_1</a><ul><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_3_2</a> <ul><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_1_2</a><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_3_2</a> <ul><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_2_2</a> <ul><li><em></em><a href='javascript:void(0);'>菜单_3_1</a><ul><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_3_2</a> <ul><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li></ul></li></ul></li></ul><script type="text/javascript">(function(e){for(var _obj=document.getElementById(e.id).getElementsByTagName(e.tag),i=-1,em;em=_obj[++i];){ em.onclick = function(){ //onmouseovervar ul = this.nextSibling;if(!ul){return false;}ul = ul.nextSibling; if(!ul){return false;}if(e.tag != 'a'){ ul = ul.nextSibling; if(!ul){return false;} } //a 标签控制隐藏或删除该⾏for(var _li=this.parentNode.parentNode.childNodes,n=-1,li;li=_li[++n];){if(li.tagName=="LI"){for(var _ul=li.childNodes,t=-1,$ul;$ul=_ul[++t];){switch($ul.tagName){case "UL":$ul.className = $ul!=ul?"" : ul.className?"":"off";break;case "EM":$ul.className = $ul!=this?"" : this.className?"":"off";break;}}}}}}})({id:'menu',tag:'em'});</script></body></html>希望本⽂所述对⼤家的JavaScript程序设计有所帮助。

jquery 无限极下拉菜单的简洁实例(精简浓缩版)_

jquery 无限极下拉菜单的简洁实例(精简浓缩版)_

jquery 无限极下拉菜单的简洁实例(精简浓缩版)_下面我就为大家带来一篇jquery 无限极下拉菜单的简洁实例(精简浓缩版)。

我觉得挺不错的,现在就分享给大家,也给大家做个参考。

jquery 无限极下拉菜单的简洁实例(精简浓缩版)!doctype htmlhtmlheadmeta charset="utf-8"meta name="viewport" content="width=device-width" title脚本之家 /titlescript type="text/javascript" src="js/jquery-1.9.1.js"/scriptscript type="text/javascript"$(document).ready(function(){$(".menu li").hover(function(){$(this).children("ul").show(); //mouseover},function(){$(this).children("ul").hide(); //mouseout});});/scriptstyle type="text/css"ul{ list-style:none; margin:0; padding:0;}.menu { height:30px; line-height:30px; }.menu li { float:left; position:relative;} /*这一级是导航*/.menu li a { display:block; height:30px; line-height:30px; padding:0 20px; }.menu li a:hover { color:#000; background:#EFEFEF; } .menu li a.more { color:red; }.menu li ul { position:absolute; float:left; width:150px; border:1px solid #000; display:none;} /*这是其次级菜单*/.menu li ul a { width:110px; }.menu li ul a:hover { background:gray;}.menu li ul ul{ top:0;left:150px;} /*从第三级菜单开头,全部的子级菜单都相对偏移*//style/headbodyul class="menu"lia href="#"菜单一/aul class="one"lia href="#"菜单一/a/lilia href="#"菜单二/a/lilia href="#"菜单三/a/lilia href="#"菜单四/a/lilia href="#" class="more"菜单五/a ul class="two"lia href="#"菜单一/a/lilia href="#"菜单二/a/lilia href="#"菜单三/a/lilia href="#"菜单四/a/lilia href="#" class="more"菜单五/a ul class="three"lia href="#"菜单一/a/lilia href="#"菜单二/a/lilia href="#"菜单三/a/lilia href="#"菜单四/a/lilia href="#" class="more"菜单五/a ul class="four"lia href="#"菜单一/a/lilia href="#"菜单二/a/lilia href="#"菜单三/a/lilia href="#"菜单四/a/lilia href="#" class="more"菜单五/a ul class="four"lia href="#"菜单一/a/lilia href="#"菜单二/a/lilia href="#"菜单三/a/lilia href="#"菜单四/a/lilia href="#"菜单五/a/li/ul/li/ul/li/ul/li/ul/li/ullia href="#"菜单二/aul class="one"lia href="#"菜单一/a/lilia href="#"菜单二/a/lilia href="#" class="more"菜单三/a ul class="two"lia href="#"菜单一/a/lilia href="#"菜单二/a/lilia href="#" class="more"菜单三/a ul class="three"lia href="#"菜单一/a/lilia href="#"菜单二/a/lilia href="#"菜单三/a/lilia href="#"菜单四/a/lilia href="#"菜单五/a/li/ul/lilia href="#"菜单四/a/li/ul/li/ullia href="#"菜单三/a/lilia href="#"菜单四/a/lilia href="#"菜单五/aul class="one"lia href="#"菜单一/a/lilia href="#"菜单二/a/lilia href="#"菜单三/a/li/ul/li/ul/body/html以上这篇jquery 无限极下拉菜单的简洁实例(精简浓缩版)就是我分享给大家的全部内容了,盼望能给大家一个参考...。

ASP XML JavaScript 实现动态无限级联动菜单

ASP XML JavaScript 实现动态无限级联动菜单
// Autho :Forbes Pu(蒲佛信)
// Email :fason_pfx@
// HomePage :
// Blog :/fason/
// /fason/
//-----------------------------------------------------/
function attachSelect(sXMLSrc, aSel, sStore) {
var oXML = CreateXmlDocument();
var oDocument = null;
<select>
s=s & ",'Select" & i & "'" '把每个<select>的id 保存在变量s,它的格式为:id1,id2,id3,id4
next
xmlDoc.save filename '正式保存Xml文件
CloseXml xmlDoc '关闭Xml文件
//-----------------------------xmlselect.js文件开始-------------------------------
//-----------------------------------------------------/
// NichName :fason
ClassName nvarchar 50 类别名称
ParentID int 2 连接到组(0表示是父类)
'####################################我的ASP代码如下####################################

三级导航菜单模板_代码与实例

三级导航菜单模板_代码与实例
</a></li> <li><a href="#" title="导一*栏一*事项二">导一*栏一*事项二
</a></li> <li><a href="#" title="导一*栏一*事项三">导一*栏一*事项三
</a></li> <li><a href="#" title="导一*栏一*事项四">导一*栏一*事项四
</a></li> </ul>
</li> <li><a href="#" title="导一*菜单栏二">导一*菜单栏二</a>
<ul> <li><a href="#" title="导一*栏二*事项一">导一*栏二*事项一
</a></li> <li><a href="#" title="导一*栏二*事项二">导一*栏二*事项二
<ul> <li><a href="#" title="导一*栏三*事项一">导一*栏三*事项一
</a></li> <li><a href="#" title="导一*栏三*事项二">导一*栏三*事项二

凤凰网面试题_已整理

凤凰网面试题_已整理
{
$files = array();
if ( $handle = opendir($dir) ) {
while ( ($file = readdir($handle)) !== false ) {
if ( $file != ".." && $file != "." ) {
3》在你以往开发的项目中缓存技术的应用(如没有请注明)
4》php常见缓存技术、解决方案、开源软件
5》当系统性能无法达到要求是,要求你做出改进方案,你从哪些方面入手?
按重要度排序
$sql 优化
mysql冗余数据的清理
$php 冗余代码清理。
提高硬件性能,增大带宽
include->include有返回值,而require没有(可能因为如此require的速度比include快)
注意:包含文件不存在或者语法错误的时候require是致命的,include不是
5、详细描述php处理web上传文件的流程。如何限制上传文件的大小不能超过某个数值?
都可以
http_request.open
写出你最常用的AJAX框架产品并简单说明优缺点?
jquery 跨平台。代码量比较少。
14、简述MySQL数据库中,索引、主键、唯一主键、的区别,用什么方法可以分析SELECT是否需要引入索引或者索引是否合理?
答: 主键就是索引与唯一的结合。
16、请设计一个数据库结构可以实现无限极子菜单的树形菜单功能并提供菜单生成的算法?
数据库设计
shops_category一样。
sc_id
sc_pid
sc_name

在WEB项目中多维下拉菜单的实现技巧和方法

在WEB项目中多维下拉菜单的实现技巧和方法
function body_onload(){
var TD = GetParent(document.all("s0"), "TD");
TD.innerHTML = MakeMenu(arrUnit, 0, 0, "s0", 1);
TD = GetParent(document.all("s1"), "TD");
<SELECT NAME="s1" onChange=" SetSubMenu(this)">
<OPTION Value="1">单位1</OPTION>
<OPTION Value="2">单位2</OPTION>
….
</SELECT>
<OPTION>元素的Value属性从哪里来呢?对,就是第二个元素,依此类推,第三个元素指的就是显示在菜单中的数据喽,即上面的"单位1"、"单位2"…
TD.innerHTML = MakeMenu(arrDept, GetSelectValue(document.all("s0")), 0, "s1", 1);
TD = GetParent(document.all("s2"), "TD");
TD.innerHTML = MakeMenu(arrEmp, GetSelectValue(document.all("s1")), 0, "s2", 1);

项目主要界面及菜单功能

项目主要界面及菜单功能

项目主要界面及菜单功能
一、项目主要界面
1.主界面布局
主界面的布局需要合理安排各个功能模块的位置和大小,同时考虑用户使用习惯和操作流程。

2.风格和视觉效果
主界面的风格和视觉效果要与项目的定位和目标用户相匹配,可以选择现代、简洁、高科技等风格,以吸引用户的注意力。

3.设计元素
主界面的设计元素包括颜色、图标、字体、图片等,这些元素应该能够表达项目的特点和价值。

二、菜单功能
菜单功能是指项目中的各个功能模块在主界面上通过菜单进行的操作和使用。

1.导航菜单
导航菜单是项目主界面上的一个重要功能模块,它通常包含了项目中的各个主要功能模块的入口,可以通过导航菜单方便地访问和使用这些功能。

2.文件菜单
文件菜单主要用于对文件进行基本操作,如打开、关闭、保存、另存
为等。

文件菜单还可以包含一些其他功能,如设置、帮助等。

4.查看菜单
查看菜单用于对项目中的内容进行调整和查看,如放大、缩小、刷新、全屏等。

查看菜单还可以包含一些过滤和排序的功能。

5.工具菜单
工具菜单包含了一些常用的工具,如画笔、橡皮擦、选取工具等。


具菜单还可以包含一些其他功能,如设置、选项等。

6.帮助菜单
7.其他菜单
除了以上几个常见的菜单功能外,项目还可以根据具体的需求和功能
模块自定义一些其他菜单。

这些菜单可以有特殊的功能或者用户界面。

总结
项目的主要界面和菜单功能对于提高用户体验和项目的整体价值非常
重要。

通过合理的界面设计和功能设计,可以吸引用户的注意力,提高用
户的使用效率,从而达到项目的目标和期望效果。

通用无限极下拉菜单的实现代码

通用无限极下拉菜单的实现代码

下拉菜单在我开发中经常遇到,但是没个项目都需要从新编写,改起来虽然简单但是很麻烦,我这个人还是比较懒的,今天有时间把我以前的项目开发中的菜单整理一遍,编写一个通用版本,以后就不需要那么麻烦了。

特点今天整理的菜单是由jquery+css开发有如下特点:一、通用性强以前在用的一个下拉菜单有个问题,需要对主导航和子菜单进行单独的设置,比如,二级菜单是class="first_menu",三级菜单是class="second_menu"....依次类推,这样的写法有个问题就是不利于程序员执行循环输出,而本菜单只需引入一个CSS样式即可,无需对多级菜单定义。

二、美观自动调用下拉指示以前我们手工会对下拉菜单添加一个下拉展示的class,而现在,只需要在css中定义好下拉效果的样式,代码会自动寻找下拉菜单并且添加指示箭头;三、调用简单程序员输出列表简单不需要很多的判断,只要递归调用菜单数据即可。

实现一、HTML代码首先我们在页面输出菜单数据,这些数据用ul和li组成构成菜单列表。

具体结构代码如下所示:&lt;ul class="Menue"&gt;&nbsp;&lt;li class="Menue_li"&gt;&lt;a href="#"&gt;首页&lt;/a&gt;&lt;/li&gt;&nbsp;&lt;li class="Menue_li"&gt;&lt;a href="#"&gt;菜单一&lt;/a&gt;&nbsp; &lt;ul class="sub_menu"&gt;&nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;过山车&lt;/a&gt;&lt;/li&gt;&nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;火山爆发&lt;/a&gt;&lt;/li&gt;&nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;小小鸟&lt;/a&gt;&lt;/li&gt;&nbsp; &lt;/ul&gt;&nbsp;&lt;/li&gt;&nbsp;&lt;li class="Menue_li"&gt;&lt;a href="#"&gt;菜单二&lt;/a&gt;&nbsp; &lt;ul class="sub_menu"&gt;&nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;关于我们&lt;/a&gt;&nbsp; &nbsp; &lt;ul class="sub_menu"&gt;&nbsp; &nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;山高地缘&lt;/a&gt;&nbsp; &nbsp; &nbsp; &lt;ul class="sub_menu"&gt;&nbsp; &nbsp; &nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;飞鸽传书&lt;/a&gt;&lt;/li&gt;&nbsp; &nbsp; &nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;生生世世&lt;/a&gt;&lt;/li&gt;&nbsp; &nbsp; &nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;飞黄腾达&lt;/a&gt;&lt;/li&gt;&nbsp; &nbsp; &nbsp; &lt;/ul&gt;&nbsp; &nbsp; &nbsp;&lt;/li&gt;&nbsp; &nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;数据库&lt;/a&gt;&nbsp; &nbsp; &nbsp; &lt;ul class="sub_menu"&gt;&nbsp; &nbsp; &nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;数据库表&lt;/a&gt;&lt;/li&gt;&nbsp; &nbsp; &nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;数据加密&lt;/a&gt;&lt;/li&gt;&nbsp; &nbsp; &nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;数据建模&lt;/a&gt;&lt;/li&gt;&nbsp; &nbsp; &nbsp; &lt;/ul&gt;&nbsp; &nbsp; &nbsp;&lt;/li&gt;&nbsp; &nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;C摄像头&lt;/a&gt;&lt;/li&gt;&nbsp; &nbsp; &lt;/ul&gt;&nbsp; &nbsp;&lt;/li&gt;&nbsp; &nbsp;&lt;li&gt;&lt;a href="#"&gt;测试产品&lt;/a&gt;&lt;/li&gt;&nbsp; &lt;/ul&gt;&nbsp;&lt;/li&gt;&lt;/ul&gt;一些基本的html代码,很简单无需解释代码含义,强调一下代码结构:无论是二级、三级还是几级菜单主要是嵌套ul即可;样式表名称也非常单一,子菜单就是“sub_menu”样式,这样非常有利于程序代码循环调用。

HTML级联菜单分析及实现

HTML级联菜单分析及实现

HTML级联菜单分析及实现作者:谭朝贵来源:《电脑知识与技术》2014年第15期摘要:该文介绍在应用系统中级联菜单基于WEB信息管理系统的级联菜单技术:多次提取菜单项和一次性提取菜单项。

关键词:HTML;菜单;菜单项;提取中图分类号:G642 文献标识码:A 文章编号:1009-3044(2014)14-3522-031 概述所谓级联菜单就是上一级菜单的选择决定下一级菜单的选择。

如客户端用户选择地市级公司后,县市级公司的选择就只能属于该地市级公司。

在开发应用系统时,服务器一次性把数据提供给客户端,也可多次提供给客户端。

在C++和JAVA等语言中有菜单命令,实现菜单很容易,但在HTML中没有提供专用命令,因而实现起来比较困难。

2 菜单项的提取菜单项有固定和动态之分。

固定菜单易,活动菜单难。

动态菜单项一般放在一个表中,需要时从表中提取。

这个表至少有两个字段:菜单代码和菜单文字。

在我开发的系统中有地市级公司表和县市级公司表。

3 菜单的实现在HTML中菜单是用select语句和option语句来实现的。

3.1 菜单项多次提取的实现每次只提取某一级的菜单项。

当然下次提取的菜单要包含前面提取的菜单。

例如在页面中首先显示地市级公司菜单,县市级菜单为空;选择地市级公司后提交网页,这时网页包含地市级公司菜单和县市级公司菜单。

下面代码是用ASP实现二级菜单的一段完整的HTML代码。

<% ‘文件名:index.asp</p>Dim connstrconnstr=" Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("S_D_Ter.mdb" )set conn=Server.CreateObject("ADODB.Connection" )conn.Open connstr%>function textshow(){document.form1.show.value=document.form1.tmpid.options[document.form1.tmpid.selectedInd ex].innerText+" —"+document.form1.City_select.options[document.form1.City_select.selectedIndex].innerText;}<%tmpid=request("tmpid")</p>set rs_Province=server.CreateObject("ADODB.recordset" )sql="select * from Province_Code order by P_Code"rs_Province.open sql,conn,1,1for i=1 to rs_Province.recordcount%> ‘生成地市级公司菜单项<%=trim(rs_Province("P_Name"))%><%rs_Province.movenext</p>nextrs_Province.closeset rs_Province=nothing%>…请选择县市级公司…<%set rs_City=server.createobject("adodb.recordset")</p>sql="select * from Region_Code where P_Code='" & request("tmpid")& "' order by R_Code"rs_City.open sql,conn,1,1while not rs_City.eof%> ‘生成县市级公司菜单项<%=trim(rs_City("R_Name"))%><%rs_City.movenext</p>wendrs_City.closeset rs_City=nothing%>3.2 菜单项一次性提取的实现一次性把所有菜单项都提交给客户端,其难点是如何组织菜单。

如何实现Web系统菜单

如何实现Web系统菜单

如何实现Web系统菜单在介绍如何实现菜单之前,先说明我们在系统中有很多的菜单控件,常用的为DvelopMenu 。

在系统中我们在WorkWithPlusMasterPage页面中获取菜单数据,然后进行加载。

DvelopMenu 使用了如下图所示的SDT,所以本质上,我们是基于这个SDT结构往其中添加数据。

在Web系统菜单实现有两种方式方法1.菜单从数据库动态获取,根据登录用户从数据库取不同的菜单集合a. 建立一个transaction 存储菜单信息,其中使用到了Subtype ,因为我们的菜单是有上下级的。

b. 建立transaction 存储角色数据,角色菜单数据,角色用户数据。

实质上我们是寻找登录用户的菜单数据,但是如果每个用户我们都去存储对应的用户菜单数据,会造成此表数据非常多,因此使用角色数据,角色菜单数据,角色用户数据去进行存储。

先理解:每个用户都拥有角色,角色都有对应的菜单,因此只要找到这个角色信息,就可以通过角色拥有的菜单数据找到用户的菜单数据。

c. 建立procedure :“Proc_GetDVelop_Menu” 去获取菜单数据,其中Rule 中:parm(in:&pSubMenuInfoID,in:&vLoginUser,out:&oDVelop_Menu);其中传入参数“&pSubMenuInfoID” 表示最上级菜单编号,“&vLoginUser” 表示从登录中获取的用户信息,传出参数:&oDVelop_Menu 的datatype 为DVelop_Menu 也就是第一张图片上的sdt。

对应代码如下:红线标注说明:循环调用获取菜单的方法,直到无法找到最后一个层级的菜单。

另外代码中还调用了另一个Procedure:“Proc_CheckMenuByUser” 去判断当前菜单是否属于这个用户。

Rule:parm(in:&pMenuInfoID,in:&vLoginUser,out:&oResult); “&pSubMenuInfoID” 表示最上级菜单编号,“&vLoginUser” 表示从登录中获取的用户信息,传出参数“&oResult” 为boolean 类型,表示返回true or false代码如下通过c 步骤就可以获取到当前登录用户的菜单数据d .在workwithplusmasterpage 中调用procdure 去加载数据,如红线标注,第一句表示的是从websession 中获取用户的信息如主键等。

21

21

原作者资料搜集: T he Best Designs CSS Awards 来源:Web Design Ledger 原作者:Gisele Muller 编辑:Antonia Huang@DamnDigital (转载请注明来自DamnDigital) 人人都是产品经理()中国最大最活跃的产品经理学习、交流、分享平台
21 款网页设计案例之个性导航菜单
本期我们的分享主题是 导航菜单 。 网站的页面导航可是用户访问的指南针,导航设计的好坏直接影响的是用户体验。不想让用户迷失 、保证访问过程的顺畅舒适感,那就一定要对导航菜单百分百用心。这次WDL挑选了各类极具个性 的导航菜单设计网站,从传统的头部导航菜单到侧栏导航菜单再到页脚导航菜单等等,尽情领略各 种导航设计佳作。 Z ola’s
Байду номын сангаас
Undercurrent
naks
Demi Creative
Matt Delbridge
Nordic Ruby Conference
也是 响应式网页设计的典范(需翻墙)
T he Design Office
United Pixelworkers
Leading Art
Olé Chef
bleu de chauffe
Wanda Productions
goodness
Habuhiah
Emporio Urbano
B&O Play
Ekso Bionics
Agence Crac
Sir John a Day 视频需翻墙
Phil Martinez 盗梦空间般的爆破质感
life in my shoes
色彩运用也相当出挑
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实现基于Ajax 的无限级菜单
特点:
支持Form 的无闪提交(方法有点笨)
支持MVC框架,即支持传统网页架构
多线程并发请求(要语言支持线程) 动态加载文件,只加载有用的!处理了Ajax 框架臃肿的JS 文件问题采用no table 的全div + css 布局
a.获得XMLHTTPReque对象,网上到处都找得到了,不多说:function
newXMLHttpRequest() {
var xmlreq = false;
if (window.XMLHttpRequest) {
xmlreq = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
try {
xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
}
}
}
return xmlreq;
这里提供一个通用的支持多浏览器的方法。

b. 提出异步请求
// 这里用Bcandy 作为方法名是为了感谢一个对我来说很重要的人,她一直在支持我
function Bcandy(Tid,url,parm,js) {
if(url == ""){
return;
}
// 这是一个加载信息提示框,也可以不要!
document.getElementById("load").style.visibility = "visible";
// 加载相应页面的JS 文件
if(js != null){
//加载JS文件
LoadJS(js);
}
// 获取一个XMLHttpRequest 实例
var req = newXMLHttpRequest();
// 设置用来从请求对象接收回调通知的句柄函数
var handlerFunction = getReadyStateHandler(req,Tid);
req.onreadystatechange = handlerFunction;
// 第三个参数表示请求是异步的
req.open("POST", url, true);
// 指示请求体包含form 数据
req.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
// 发送参数
req.send(parm);
}
function getReadyStateHandler(req,Tid) {
//返回一个监听XMLHttpRequest实例的匿名函数
return function () {
// 如果请求的状态是“完成”
if (req.readyState == 4) {
// 成功接收了服务器响应
if (req.status == 200) {
// 下面一句是重点,这里显示了返回信息的内容部分,也可以加以修改。

进行其它处理
document.getElementById(Tid).innerHTML = req.responseText;
document.getElementById(Tid).style.visibility = "visible";
// 这一句是实现加载信息提示框的隐藏,也可以不要。

document.getElementById("load").style.visibility = "hidden";
} else {
//有HTTP问题发生
document.getElementById("load").style.visibility = "hidden";
alert("HTTP error: "+req.status);
}
}
//动态加载JS文件
function LoadJS(file){
var head = document.getElementsByTagName('HEAD').item(0);
var script = document.createElement('SCRIPT');
script.src = file;
script.type = "text/javascript";
head.appendChild(script);
}
这就是基本的框架了,因为使用了request.responseText; 所以,可以直接请求一个页面jsp,servlet 但在使用Struts 框架的请求时要进行特殊处理,因为Form 不支持异步请求。

建议在这些页面上不要加入标签,就像.net里的asxm 文件!而且在使用Struts 框架时有点要注意的是,Mapping 对象直接返回null 就可以了,因为我们会在下面讲到并发多线程。

来处理这个问题的。

总的来看,有点像是积木搭建起来的。

这样方便文件的修改和扩展,互相之间并不影响,而且,实现了代码和标签分离。

在进行传统页面改版时,也不用重新编写全部代码。

只要修改一小部分就可以完美实现Ajax 带来的无闪刷新快感。

相关文档
最新文档