WordPress 淡出淡入导航菜单

Sep 2nd, 2008 Add Comment

有前两篇关于导航菜单的基础, 这个淡入淡出效果会显得比较简单. 菜单我们已经做出来了, 下拉效果我们已经出来了, 说白了就是要在这些基础上加一个渐变效果而已, 或呈现, 或褪去.
本文只对渐变处理作展开讨论, 其他请参考前两篇关于导航菜单的文章, 文章链接你可以在本文相关话题中找到.

这是效果演示

相关话题:

WordPress 导航菜单
二级导航菜单
淡出淡入导航菜单
滚动导航菜单
多级导航菜单
jQuery 导航菜单
点选式导航菜单 (待定话题)

作业分析:

整个菜单的结构和样式在二级导航菜单一文已经确定下来了, 我们不需要对它们再进行修改. 所以本次只需在菜单的 JavaScript 特效上进行加强.
淡入淡出是个什么玩意儿? 鼠标徘徊, 则渐显菜单; 鼠标撤离, 则渐褪菜单. 也就是 mouseover 的时候, 不断地调用某个方法令菜单的不透明度逐渐变大; mouseout 的时候, 不断地调用另一个方法令菜单逐渐变小.
这个处理过程中有两点是需要注意的. 在显示菜单之前需要进行一些前期处理 (比如: 获取菜单位置), 但这必须在渐变之前处理. 同样, 在不透明度渐变为 0 时要隐藏菜单.

实施操作:

前面的分析说得有点啰嗦了, 还是看看代码吧. :) 为了突出改动的部分, 我在代码中加入了一些 Log.

初始化
初始不透明度为 0, 而最大不透明度为被设定值或者 1.

// 定义透明度, 默认透明
this.opacity = 0;
this.maxopacity = opacity || 1;

激活
先进行前期处理, 再对菜单的透明度进行处理.

/**
 * 激活方法
 * 当鼠标移动到菜单标题是激活
 */
activate: function() {
	// 获取当前菜单体的位置
	var pos = this.util.cumulativeOffset(this.title);
	var left = pos[0];
	var top = pos[1] + this.util.getHeight(this.title);
 
	// 定义激活时样式
	this.util.setStyle(this.body, 'left', left + 'px');
	this.util.setStyle(this.body, 'top', top + 'px');
	this.util.setStyle(this.body, 'visibility', 'visible');
	this.util.setStyle(this.body, 'opacity', this.opacity);
	this.util.setStyle(this.body, 'filter', 'alpha(opacity=' + this.opacity * 100 + ')');
 
	if(this.tid) {
		clearTimeout(this.tid);
	}
	// 不断加强菜单的不透明度
	this.tid = setInterval(this.util.bind(this, this.appear), 30);
}

加强菜单的不透明度, 直到透明度到达最大不透明度.

/**
 * 加强不透明度, 直到最大不透明度
 */
appear: function() {
	this.opacity += 0.1;
	if(this.opacity >= this.maxopacity) {
		this.opacity = this.maxopacity;
		// 取消循环调用
		clearTimeout(this.tid);
	}
	// 重新设定透明度
	this.util.setStyle(this.body, 'opacity', this.opacity);
	this.util.setStyle(this.body, 'filter', 'alpha(opacity=' + this.opacity * 100 + ')');
}

解除
对菜单的透明度进行处理.

/**
 * 解除方法
 * 当鼠标移动出菜单标题是激活
 */
deactivate: function(){
	if(this.tid) {
		clearTimeout(this.tid);
	}
	// 不断减弱菜单的不透明度
	this.tid = setInterval(this.util.bind(this, this.fade), 30);
}

减弱菜单的不透明度, 直到透明度为 0 并隐藏菜单.

/**
 * 减小不透明度, 直到完全透明隐藏菜单
 */
fade:function() {
	this.opacity -= 0.1;
	if(this.opacity <= 0) {
		this.opacity = 0;
		// 隐藏菜单
		this.util.setStyle(this.body, 'visibility', 'hidden');
		// 取消循环调用
		clearTimeout(this.tid);
	}
	// 重新设定透明度
	this.util.setStyle(this.body, 'opacity', this.opacity);
	this.util.setStyle(this.body, 'filter', 'alpha(opacity=' + this.opacity * 100 + ')');
}

演示主题:

以 WordPress 自带主题 default 为基础, 仅做学习参考使用, 修改过的文件有 header.phpstyle.css, 添加了文件 js/menu.js

下载主题: default_with_menubar_3.zip

下回预告:

下回是滚动导航菜单的话题. 同样, 只需在此基础上修改 JavaScript 代码, 主要是对菜单高度的处理.

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: WordPress 淡出淡入导航菜单

  1. http://1.gravatar.com/avatar/f3a55307b49007a060e7741a79db73fd?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    好像在firefox 9.0 上有点问题。

  2. http://0.gravatar.com/avatar/834afccda2cc172891dde51dd7ae97a3?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    鼠标放到一级导航展开内容,放到内容后导航的当前状态会消息,如果这个问题解决了就更好了

  3. http://0.gravatar.com/avatar/490cf262668eebb0f0f1a50d9d48d702?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  4. http://1.gravatar.com/avatar/7aa464d90f005fbe3c18a1c6e431465e?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    站长我是想用这个wp_nav_menu()进行更改,因为这样后台菜单可以随意更新导航和排列顺序等,会很放便,应该怎么做呢????谢谢!!!

  5. http://1.gravatar.com/avatar/7aa464d90f005fbe3c18a1c6e431465e?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    wp_nav_menu()

  6. http://1.gravatar.com/avatar/7aa464d90f005fbe3c18a1c6e431465e?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    站长我是想用这个进行更改,因为这样后台菜单可以随意更新导航和排列顺序等,会很放便,应该怎么做呢????谢谢!!!

  7. http://0.gravatar.com/avatar/490cf262668eebb0f0f1a50d9d48d702?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  8. http://1.gravatar.com/avatar/7aa464d90f005fbe3c18a1c6e431465e?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    针对WP3,可否提供此效果的方法和代码??谢楼主,菜鸟!!

  9. http://1.gravatar.com/avatar/7b1409f1b0e871018a9879af2e89778e?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    学无止境啊!

  10. http://0.gravatar.com/avatar/490cf262668eebb0f0f1a50d9d48d702?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  11. http://0.gravatar.com/avatar/6f6612e7a9c4a07411398b0674945358?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    请问inove的rss浮动菜单是不是用这个做出来的?

  12. http://1.gravatar.com/avatar/b77dd68c7ff3ef39f3eb393324b9f124?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    收藏了~~~认真学习!

  13. http://0.gravatar.com/avatar/6f6612e7a9c4a07411398b0674945358?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  14. http://1.gravatar.com/avatar/d49fd5453de5b190e03b9ac9feedc9d8?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    看了这个系列教程,备查,有空在自己blog上效仿一下。

  15. http://1.gravatar.com/avatar/7060dfb9a4706f749898fb7b915aa5da?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    话说 Demo 效果很棒..

    Delacro:
    同不懂JS

    同样不懂..

  16. http://0.gravatar.com/avatar/4c0d5d8768d0c3551aff00d7a1dfc710?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  17. http://1.gravatar.com/avatar/bc0c69a6bf72455c4abb653a1d70747a?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    学习了,不懂JS :oops:

  18. http://0.gravatar.com/avatar/490cf262668eebb0f0f1a50d9d48d702?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @锐风
    (- -!) 我都没留意, 领先那么多, 看来要加个权值才行, 哈哈~

    @center
    正有此意, 等会就弄一下.

  19. http://1.gravatar.com/avatar/f2216b12bee779fd4f6bab555899ca16?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    可否给个online demo看一下,谢谢。

  20. http://1.gravatar.com/avatar/7060dfb9a4706f749898fb7b915aa5da?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    恩, 恭喜鄙人荣登 Most Active Guys 榜首..

  21. http://1.gravatar.com/avatar/7060dfb9a4706f749898fb7b915aa5da?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    貌似米沙技术难度啊..

  22. http://0.gravatar.com/avatar/0181a79a939b6fadd690b16913489cbf?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  23. http://1.gravatar.com/avatar/7c9412d8d9386b950a3ebfe8bfedc053?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  1. Loading...