用 JA Transmenu 模块做多级弹出菜单

转自http://www.joomlagate.com

“弹出菜单”这个说法本来不规范,尽管你我都明白这是什么意思,而实际上我们所理解的那个菜单样式英文说法是“Slide Menu”(滑动菜单),如果要用“弹出菜单”就成了“Popup Menu”。当然,“走的人多了也便成了路”,我考虑再三,还是尊重中国风俗,在文章标题中使用了错误的说法,希望不要误导了各位。

在Joomla世界,建造一个滑动菜单可以有N多选择。JA Transmenu 模块是其中一个,下图中所演示的菜单就是用这个模块做成的。我之所以首先来演示这个模块,是因为以下两点原因:

1、它是免费的。

2、简单易用。

JA Transmenu演示

 

在继续阅读之前,请用鼠标指向上面的菜单,看看其弹出效果,你甚至可以点击其中某些链接。然后我们再来回答“怎么做”这个问题。

1、创建一个点不动的菜单链接

在上面演示中,一级菜单中的“酷站巡展”这个链接是点不动的。这个效果适合于强制访客点击二级菜单的需要。有人认为,在新建菜单项时,选择“占位符/分隔符”(Separator / Placeholder)就能造成一个点不动的链接,因为它不指向任何目标。不过,我发现这种办法所生成的菜单链接其样式很糟糕,无法与其他同级链接保持一致,因为它的CSS类不是mainlevel。

在本文的第一版我曾经认为将某个一级菜单项目的类型选择为“Link-URL”,然后将此URL定义为“#”符号即可建成无法点击的菜单项。经过测试这个方法无法做到。我们还得用“占位符”来建立这种菜单项。

当然,我们需要通过CSS使占位符的外观与可以点击的链接相同。具体办法后面详述。这个小技巧虽然与滑动菜单没有直接联系,但是与上面演示的却有联系,因此我在此也捎带说一下。

2、建立多级菜单

Joomla自身允许创建多级菜单,问题是它无法展示出滑动效果。因此,我们先解决第一步:创建多级菜单。

使用(超级)管理员身份登录到Joomla网站后台,点击菜单上的“Menu”,然后选择一个你想实现多级滑动的菜单,比如说topmenu,点击其名称。这时会展示出所有已属于topmenu的菜单链接,我猜想你那里很可能还是单级的。

点击右上角工具栏上的“New”按钮,新建一个菜单项目。根据你的目标选择菜单类型,例如要指向FireBoard论坛,就选择“component”类型。然后点击“Next”按钮。实现多级的关键就在下面这个页面上—— 仔细看看,“Parent Item”这个设置,中文版本应该是“上级项目”,默认是选择了“Top”,即“顶级”(如下图所示),所以你新建的菜单链接都属于第一级。假如现在我们要将Fireboard论坛的菜单放到第二级,那么就必须在此为它选择上级菜单项目。选中之后,点击工具栏上的“Save”按钮保存新菜单项。

Joomla多级菜单的实现

保存之后,又回到了刚才的topmenu内容列表。这时可以看到,新建立的菜单位于某个一级菜单之下,并且在版面上向右增加了缩进,很容易就能看出来父级菜单和子级菜单的关系。

如果要将现有的某个一级菜单变为二级菜单,只需要在topmenu内容列表上点击其名称,进入其设置页面,然后将“Parent Item”这里选择为Top之外的其他一级菜单项即可。

同理,你可以建立三级、四级、…… N 级菜单。

3、完成多级滑动菜单

从本站下载JA Transmenu 2.0 简体中文版,这是一个标准模块。从Joomla后台安装它。这个模块本身没有任何内容,它的任务是在前台展示管理员指定的某个菜单,如上面提到的topmenu。

既然我们要通过JA Transmenu来展示topmenu的内容,那么原来的topmenu就必须取消发布。否则前台就会出现两个重复的topmenu内容。

将原来的topmenu取消发布之后,我们点击后台模块列表中的JA Transmenu名称进入其设置页面。可以看出,设置参数并不多。

JA Transmenu 2.0 的参数

 

前两个参数都是关于CSS的,为了便于用户自定义菜单的样式。我们先从浅处入手,不必理会这里。

“菜单名称”这里需要管理员指定用JA Transmenu来展示哪个菜单模块,因为它无法包揽所有菜单。我们本例中就指定使用topmenu吧,因为刚才我们为topmenu建立了多级菜单链接。

“菜单类型”是要管理员决定,前台的滑动菜单其一级菜单是水平放置,还是垂直放置?比如本例中的topmenu,我们一般都是习惯于水平放置,因此在这里选择“水平”即可。

“菜单方向”则是指二级菜单的弹出方向,不要管三级、四级,因为那些默认都是水平的。二级菜单需要指定方向,是因为一级菜单的方向有两种可能。既然我们将一级菜单设计成了“水平”,那么二级菜单应该是在垂直方向上。这里有两种选项:向上或者向下。很显然,一般来说,我们希望二级菜单向下弹出,就如同本文第一页展示的那个菜单。不过,也难免某些用户希望出现Windows的开始菜单那样的效果,那么你选择“向上”即可。

“菜单相对位置”是指二级以下的菜单弹出方向。因为前面的参数已经把一级、二级菜单方向都定义了。所以,我们希望三级菜单从哪里弹出来就选择哪个方向。在本例中,三级菜单是从二级菜单的右侧弹出的;又由于我希望一、二、三级菜单显示一个逐级下降的外观,所以我选择了“右下”方向。

“显示菜单图标”这个是指提示存在下级菜单的那个图标。在本例中就是二级菜单上“Joomla之门”右侧那两个白色大于号(>>),这个图标提示该项目存在下级菜单。如果你不想显示,选择“否”即可。

“菜单图标位置”说的是上一条中那个图标显示在什么位置。一般来说,当然是显示在下级菜单弹出的位置。本例中下级菜单从右侧弹出,因此我选择让这个小图标显示在右侧。当然了,如果你在上一条中选择了“否”,这一条的设置就没有意义。

“上端位置”和“左侧位置”这两条是专门限定二级菜单的相对位置的。由于JA Transmenu使用了Javascript来实现滑动效果,因此在某些网站的模板中可能出现奇怪现象:就是二级菜单弹出的位置距离其父级菜单项目有一定距离。那么我们就可以通过这两个参数来调整。这里只能填写整数数字,不需要填写单位,默认为“像素”(pixel)。如果你想要将二级菜单向右移动,“左侧位置”就填写正整数;如果需要向下移动,“上端位置”就填写正整数。如果需要向左、向上移动呢?分别填写负整数即可,如“左侧位置”填 -200 ,就表示二级菜单向左移动200像素。在实际应用中,是否需要移动,移动多少,需要用户在前台观看效果,刷新页面,进行调整。

“下级菜单水平留白”和“下级菜单垂直留白”分别指三级以后的菜单在弹出时其顶端距离父级菜单右上角的水平和垂直距离。例如,在本例中,我需要三级菜单紧贴二级菜单右侧,因此我将“下级菜单水平留白”设为“1”(单位:像素);我希望三级菜单弹出时略低于其父级菜单,因此我将“下级菜单垂直留白”设为5。

设置完成后,将此模块发布到原来展示topmenu的模块位置,然后刷新前台页面,就应该看到滑动菜单的效果了。

4、自定义JA Transmenu滑动菜单的样式

细心的读者可能已经发现,上述参数中没有针对滑动菜单的字体、颜色、背景等等作出定义。难道所有JA Transmenu的用户都使用同一个效果吗?当然不是。

按理来说,这些设置也应该出现在后台参数中,这样更符合Joomla的操作习惯,也方便用户自定义菜单外观。可是,该模块的作者,JoomlArt团队正在忙着制作、销售专业模板,根本没有计划改进这个模块。所以,我们就自己动手吧。

我们要用到三个文件:transmenu.js、transmenuh.css或transmenuv.css。在安装之后,它们位于 /modules/ja_transmenu/ 目录中。我之所以用“或”,是因为后面两个文件只用一个。具体哪一个取决于你所定义的一级菜单的方向,即后台参数中“菜单类型”,如果是“水平”,就用前者;“垂直”则用后者。这两个文件名末尾的h和v已经说明了这一点。

在transmenu.js这个文件的第45行,我们只设定一个内容:TransMenu.backgroundColor,它表示次级菜单的背景颜色。其余样式均在CSS文件中。

在本例中,我们设定了前台菜单为“水平”,因此我们打开transmenuh.css这个文件,逐个设置菜单的字体、颜色、背景、透明度、鼠标指向时的颜色变化、点击之后的链接颜色等等。我在transmenuh.css这个文件中用中文解释了部分代码的含义,transmenuv.css这个文件没有注释,不过我相信大同小异。请各位会员自己按照需要调整吧。

如果你建立了一个类型为“占位符”的一级菜单项,以强制访客点击二级菜单,那么你会发现该占位符的外观与其他同级菜单链接迥然不同,非常难看。既然是外观,那么就可以通过CSS来修改:打开 /modules/ja_transmenu/ 文件夹里面的transmenuh.css(如果是垂直菜单则为transmenuv.css),大约在116行,找到:

 

a.mainlevel-trans:link, a.mainlevel-trans:visited {

将其修改为:

 

a.mainlevel-trans:link, a.mainlevel-trans:visited, .mainlevel-trans {

这样就等于给“占位符”定义了与其他同级可点击链接相同的外观。

这时,在前台可以看到“占位符”类型的菜单项目也有了相同的字号、字体、颜色和背景色。但是,当我们把鼠标指向这个“占位符”类型的菜单项目时,就露出了马脚:鼠标没有变成一只手的样子,而是普通的“I”光标符号。由于大多数人已经习惯了鼠标指向菜单时必然是手形符号,那么现在这种情况就容易让访客感到沮丧。

Ok,好在CSS也能伪装这一点。在上面修改的代码下面一行,插入一句:

 

cursor: hand;

这句代码意思是只要鼠标进入菜单区域,就一直显示手形外观。你可以在我正在建设的一个新网站 http://www.spinechina.org 上面看看这个效果。

还有一处需要修改,因为如果将一级菜单设置为“占位符”类型,则点击其二级菜单之后,一级菜单成了“当前菜单”(active menu),这时该一级菜单的外观又不那么美观了。

修改方法是在CSS文件中140行左右,找到:

 

a.mainlevel_active-trans, a.mainlevel_active-trans:visited {

修改为:

 

a.mainlevel_active-trans, a.mainlevel_active-trans:visited, span.mainlevel_active-trans{

这是因为“占位符”型的一级菜单项目不是链接(a),而是span。

如果还发现其他外观问题,我相信都可以在CSS文件中得到改善。这里不能一一列举,有关CSS知识可以参考《CSS权威指南》PDF中文版

如果你使用了其他滑动菜单模块,一样可以通过CSS来使得“占位符”型菜单链接看起来与正常链接没什么区别。或许CSS语句不通,但是道理相同,所谓“触类旁通”,各位看官自己摸索吧。

5、JA Transmenu的缺点

这个滑动菜单模块也不是完美的。最重要一点就是:在每个网站只能为一个菜单模块实现滑动效果。如果我们既要在topmenu实现多级滑动,又要在mainmenu实现多级滑动,那么这个模块做不到。即使我们通过模块列表上的“Copy”按钮可以复制一份,但是我们无法复制 /modules/ja_transmenu/ 这个目录。当然了,如果高手从代码修改起,或许可以制作出一个复制件,但这已经远远超出了我这个菜鸟的能力范围,留待高人讲解吧。

转载于:https://www.cnblogs.com/JuneZhang/archive/2010/11/02/1867020.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于HTML的面试题-html5/css3篇

1. html5 新增标签有哪些(或者新增的语义标签)?2. HTML5 中有哪些新特性?3. 视频有哪几种格式?这几种格式有什么区别?4. 写出你知道的层级选择符(结构性伪类选择器)5. 什么是渐进增强…

Elasticsearch的用例:灵活的查询缓存

在前两篇有关Elasticsearch用例的文章中,我们已经看到Elasticsearch 可用于存储甚至大量文档 ,并且我们可以通过Query DSL使用Lucene的全文功能访问那些 文档 。 在这篇较短的文章中,我们将把两个用例放在一起,以了解读取繁重的应…

Vue底层架构及其应用(上)转

https://mp.weixin.qq.com/s?__bizMzIzNjcwNzA2Mw&mid2247486427&idx1&sn61f9579bbe1dfe26da4b53eb538fee13&chksme8d28643dfa50f557c56ce8b5bc9b0597a157a20791e21b1812fe2a30ff4cf2c813608473b43&mpshare1&scene23&srcid#rd 一、前言 市面上有很…

jquery笔记一:下载安装、语法、选择器、遍历选择元素的方法、jQuery动画

目前 jQuery 兼容于所有主流浏览器, 包括 IE 6!开发时常用 jquery.js,上线用 jquery.min.js。 jq插件 目前jQuery有三个大版本: (1)1.x.x: 兼容ie6,7,8,使用最为广泛,官网只做BUG维护&#xff…

jquery简介 each遍历 prop attr

一、JQ简介 jQuery是一个快速、简洁的JavaScript框架,它封装了JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。 装载的先后次序:  jQuery封装库在上&#xff0…

如何让Visitor变得可爱1

本文转自:http://www.cnblogs.com/idior/archive/2005/01/19/94280.html 在wayfarer的文章中提到了如何利用visitor模式实现添加新的功能。如他所说,在实际过程中显的不是那么可爱。不过他为我们提供了一个可行的解决方案,本文将在此基础上使…

EJB 3.x:生命周期和并发模型(第1部分)

Java EE组件生命周期和与并发相关的详细信息对于经验丰富的专业人员而言可能不是新知识,但是对于初学者而言,这可能需要花费一些时间。 就EJB而言,了解其生命周期 (以及相关的并发场景)对于确保使用EJB的正确用法和解…

单独使用 laydate 日期时间组件

layui 日期和时间组件官方文档 需要注意几点: 下载压缩包后,复制整个 laydate 文件夹放到项目中,里面的文件不要改动位置,否则会报错;在移动端使用时,要给 input 添加 readonly 属性,否则点击…

从零开始学习SVG

1 什么是SVG? MDN中的定义是:SVG即可缩放矢量图形(Scalable Vector Graphics,SVG),是一种用来描述二维矢量图形的 XML 标记语言。 简单地说,SVG 面向图形,HTML 面向文本。SVG 与 Flash 类似&am…

layui 关于layDate设置时间限制问题

前面是尝试结果,有兴趣的可以康康,赶时间的可以直接翻到底下 ----->直达车 因为只有一个页面,没什么标准,所以自己就使用了layui的时间控件,并且作为独立组件。 第一次尝试 - 使用 min 一开始只想让结束时间有个…

QQ聊天记录快速迁移

QQ聊天记录快速迁移 在工作中大家经常会用到QQ来沟通,但是很多时候在其它设备上登录QQ就无法查看到之前的聊天记录和图片,这是因为电脑上的QQ聊天记录一般都是保存在电脑本地硬盘里,所以我们在换设备登录QQ后,是无法查看到之前电脑…

Hawtio和Jolokia的休眠统计

企业Java的很大一部分处理数据。 在企业设置中使用数据的所有不同方式中,仍然存在使用任何种类的O / R映射的行之有效且广泛教授的方法。 JPA标准使每个人都可以轻松使用它,并且它也应该是可移植的。 但是,我们不要谈论迁移细节。 O / R映射的…

laydate 时间控件去掉秒以及解决在移动端不能滑动的问题

一、时间控件去掉秒&#xff0c;保留时分 二、时间控件在移动端不能滚动 一、时间控件去掉秒&#xff0c;保留时分 方法一&#xff1a;使用 ready 回调函数 ready 控件在打开时触发。打开控件时让秒消失。 <script> laydate.render({elem: #endTime, //指定元素trigg…

Entity Framework Code First属性映射约定 转载https://www.cnblogs.com/libingql/p/3352058.html

Entity Framework Code First属性映射约定 Entity Framework Code First与数据表之间的映射方式有两种实现&#xff1a;Data Annotation和Fluent API。本文中采用创建Product类为例来说明tity Framework Code First属性映射约定的具体方式。 1. 表名及所有者 在默认约定的情况下…

layui 时间控件二次渲染,点击一个自定义按钮清空/重置时间控件

标题小标题一、错误尝试二、时间控件二次渲染的3种方法2.1 直接删除原来绑定时间控件的DOM&#xff0c;再重新渲染&#xff08;推荐&#xff09;&#xff1b;2.2 使用 clone() &#xff0c;并且改变 lay-key&#xff1b;2.3 使用 clone() &#xff0c;并且删除 lay-key&#xf…

2019年春第二次课程设计实验报告

一、试验项目名 贪吃蛇 二、试验功能介绍 通过数组构造小蛇&#xff0c;在通过数组中的变化控制小蛇移动和变长。 三、项目模块结构介绍 构造小蛇 小蛇移动 移动中碰到边框或自己失败 小蛇长大 四、实现界面展示 五、代码托管链接https://gitee.com/t001023/software_class_1_t…

Elasticsearch用例:全文搜索

在本系列有关Elasticsearch用例的最后一篇文章中&#xff0c;我们介绍了Elasticsearch提供的用于存储甚至大量文档的功能 。 在这篇文章中&#xff0c;我们将研究其另一个核心功能&#xff1a;搜索。 我正在利用上一篇文章中的某些信息&#xff0c;因此&#xff0c;如果您还没有…

使用echarts时,鼠标首次移入屏幕会闪动,屏幕会出现滚动条

当我刷新&#xff0c;鼠标经过图表时&#xff0c;页面会出现滚动条 原因&#xff1a; 在echarts图表中出现 tooltip 时&#xff0c;画布的父标签&#xff08;即&#xff1a;echarts.init()的标签&#xff09;的宽高有时会发生变化&#xff0c;导致相对布局的div可能大小发生…

移动端 flexible.js 布局详解

原本想直接引入原文链接&#xff0c;但是又担心作者哪天想不开注销账号&#xff0c;这么好的一篇文章看不到了&#xff0c;还是转载一下吧(/ω&#xff3c;)。 另外推荐一篇好文&#xff1a;移动端rem自适应实操讲解 本文讲的通过 flexible.js 实现了rem自适应&#xff0c;有了…

Gradle善良:获得更多的依赖性见解

在我们的大多数项目中&#xff0c;我们都依赖于其他代码&#xff0c;例如库或其他项目。 Gradle有一个不错的DSL来定义依赖关系。 依赖性在依赖性配置中分组。 这些配置可以自己创建&#xff0c;也可以通过插件添加。 一旦定义了依赖项&#xff0c;我们就可以通过dependencies任…