改写一个简单的菜单 弹性大小


Posted in Javascript onDecember 02, 2010

这里有一个小说明就是,是关于动态设置字体大小的函数,由于不考虑3D菜单的形式,我简单采用了余弦函数

具体实现时,为了不在整个菜单总高度中出现两个波峰而产生突兀感,事实上cos(x/K)中的K应该是一个与菜单条目数量以及最大字体值有关的函数,这里我简单设为了一个常量 。

完整的代码为

<html> 
<head> 
<title>menu list</title> 
<style type="text/css"> 
html { 
overflow: hidden; 
} 
body { 
background-color: #111111; 
color: #eee; 
} 
ul#menu { 
position: absolute; 
left: 40%; 
} 
li { 
list-style: none; 
padding: 0px; 
margin: 1px; 
} 
a { 
text-decoration: none; 
font-family: arial, helvetica, verdana, sans-serif; 
color: #fff; 
font-size: 20px; 
} 
</style> 
<script type="text/javascript"> 
var menu = function(){ 
var $ = function(o){ 
return document.getElementById(o); 
} 
var words = document.getElementsByTagName('a'); 
var size; //当前字体大小 
var od;//指示是否为同一目标 
var max_size = 40, min_size = 20;//最大字体与最小字体 
var go = 0;//go指示根据指针方位的动画 ,dT指示指针是否在移动 
var xm, xmb, ym, ymb;//指针运动与判定 
/*入库*/ 
var addEvent = function(o, e, f){ 
if (window.addEventListener) { 
o.addEventListener(e, f, false); 
} 
else 
if (window.attachEvent) { 
o.attachEvent('on' + e, f); 
} 
else { 
return false; 
} 
} 
var pxTop = function(o){//获取元素相对整个文档的y位置 
return o.offsetParent ? o.offsetTop + pxTop(o.offsetParent) : o.offsetTop; 
} 
addEvent(document, 'mousemove', function(e){ 
e = e || window.event; 
ym = (e.clientY || e.y) + document.body.scrollTop; 
if (ym != ymb) { 
ymb = ym; 
} 
od = e.target ? e.target : (e.srcElement ? e.srcElement : null); 
}) 
var getStyle = function(elem, name){ 
if (elem.style[name]) { 
return elem.style[name]; 
} 
else 
if (elem.currentStyle) { 
return elem.currentStyle[name]; 
} 
else 
if (document.defaultValue && document.defaultValue.getComputedStyle) { 
name = name.replace(/([A-Z])/g, "-$1"); 
nmae = name.toLowerCase(); 
var s = document.defaultValue.getComputedStyle(elem, name); 
return s ? s : null; 
} 
else 
return null; 
} 
var test = function(){ 
for (var i = 0; i < words.length; i++) { 
var p = words[i]; 
size = parseInt(getStyle(p, "fontSize")); 
if (od && od.className == "move") { 
if (p != od) { 
p.style.color = "white"; 
} 
p.style.fontSize = Math.max(go * Math.cos((ym - pxTop(p)) / (3 * max_size)), min_size) + "px"; 
od.style.color = "yellow"; 
if (go <= max_size) { 
go = go + 0.05; 
} 
} 
else { 
if (go >= min_size) { 
go = go - 0.05; 
} 
p.style.fontSize = (Math.max(size - 0.05, min_size)) + "px"; 
p.style.color = "white"; 
} 
} 
} 
return { 
test: test 
} 
}() 
window.onload = function(){ 
setInterval(menu.test, 16) 
} 
</script> 
</head> 
<body> 
<ul id="menu"> 
<li> 
<a href="http://del.icio.us/tag/scripting" target="_blank" class="move">scripting</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/javascript" target="_blank" class="move">javascript</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/web" target="_blank" class="move">web</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/dhtml" target="_blank" class="move">dhtml</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/css" target="_blank" class="move">css</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/ajax" target="_blank" class="move">ajax</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/programming" target="_blank" class="move">programming</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/design" target="_blank" class="move">design</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/webdesign" target="_blank" class="move">webdesign</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/html" target="_blank" class="move">html</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/dom" target="_blank" class="move">dom</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/webdev" target="_blank" class="move">webdev</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/reference" target="_blank" class="move">reference</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/tools" target="_blank" class="move">tools</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/tutorial" target="_blank" class="move">tutorial</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/xmlhttprequest" target="_blank" class="move">xmlhttprequest</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/menu" target="_blank" class="move">menu</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/xml" target="_blank" class="move">xml</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/library" target="_blank" class="move">library</a> 
</li> 
<li> 
<a href="http://del.icio.us/tag/development" target="_blank" class="move">development</a> 
</li> 
</ul> 
<!-- <h1 id="test">a</h1> --> 
</body> 
</html>

演示代码:http://demo.3water.com/js/caidan/js_caidan.htm
Javascript 相关文章推荐
最简单的jQuery程序 入门者学习
Jul 09 Javascript
JavaScript CSS修改学习第六章 拖拽
Feb 19 Javascript
JS实现一键回顶功能示例代码
Oct 28 Javascript
JavaScript弹出窗口方法汇总
Aug 12 Javascript
javascript与css3动画结合使用小结
Mar 11 Javascript
开启BootStrap学习之旅
May 04 Javascript
全面理解闭包机制
Jul 11 Javascript
JS原型链 详解及示例代码
Sep 06 Javascript
JavaScript输入框字数实时统计更新
Jun 17 Javascript
Bootstrap 中data-[*] 属性的整理
Mar 13 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
Sep 29 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
May 28 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
Dec 02 #Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
Dec 02 #Javascript
JQuery 弹出框定位实现方法
Dec 02 #Javascript
Jquery replace 字符替换实现代码
Dec 02 #Javascript
jquery json 实例代码
Dec 02 #Javascript
JavaScript格式化数字的函数代码
Nov 30 #Javascript
JavaScript中使用正则匹配多条,且获取每条中的分组数据
Nov 30 #Javascript
You might like
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
聊天室php&amp;mysql(三)
2006/10/09 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
2019/10/08 PHP
利用404错误页面实现UrlRewrite的实现代码
2008/08/20 Javascript
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
2010/05/06 Javascript
JavaScript的类型简单说明
2010/09/03 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
vue实现购物车加减
2020/05/30 Javascript
python制作花瓣网美女图片爬虫
2015/10/28 Python
python 爬取微信文章
2016/01/30 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
python中append函数用法讲解
2020/12/11 Python
Python学习之time模块的基本使用
2021/01/17 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
研修第一天随笔感言
2014/02/15 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
倡议书格式
2014/08/30 职场文书
普通党员个人对照检查材料
2014/09/18 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
教你使用TensorFlow2识别验证码
2021/06/11 Python