弹性菜单 加了 透视效果 运动 小案例

/**弹性菜单 加了透视效果,类似滚动歌词的效果

*运动过程中,背景色和颜色都会改变,实现原理见 滚动歌词
* 小bug 当设置字体为 微软雅黑时,运动过程中菜单中的字体会有小抖动,修复方法,left值不能直接赋值,先存起来**/

  1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
  2 "http://www.w3.org/TR/html4/strict.dtd">
  3
  4 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
  5     <head>
  6         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7         <title>7.弹性菜单 + 透视效果 </title>
  8         <meta name="author" content="Administrator" />
  9         <!-- Date: 2014-12-13 -->
 10         <style>
 11             *{margin:0;padding:0;font-size:13px;font-family:microsoft yahei;text-align:center}
 12             ul{margin:40px auto;position:relative;width:816px;}
 13             li{list-style:none;float:left;width:100px;height:30px;text-align:center;line-height:30px;margin-right:5px;}
 14             li.box{background:#DE4465;}
 15             #mask{position:absolute;background:#2272BD; top:0; overflow:hidden}
 16             #mask #ul2{width:816px; position: absolute;color:#fff;margin:0 auto;}
 17
 18         </style>
 19         <script>
 20         /**弹性菜单的目标点的获得:
 21          * 目标点不是确定的,其实就是当前li的位置
 22          * 小bug 当设置字体为 微软雅黑时,运动过程中菜单中的字体会有小抖动,修复方法,left值不能直接赋值,先存起来**/
 23             window.onload=function(){
 24                 var oUl=document.getElementById(‘menu‘);
 25                 var oUl2=document.getElementById(‘ul2‘);
 26                 var aLi=getByClassName(oUl,‘li‘,‘box‘);
 27                 var oMask=document.getElementById(‘mask‘);
 28
 29                 var timer=null;
 30                 var timer2=null;
 31                 var iSpeed=0;
 32                 var left=0;
 33
 34                 document.title = oMask.offsetLeft + ‘-‘ + aLi[0].offsetLeft;
 35
 36                 for(var i=0;i<aLi.length;i++){
 37
 38                     aLi[i].onmouseover=function(){
 39                          clearInterval( timer2 );//清除timer2,让oMask不回到0
 40                           bonce(this.offsetLeft);
 41                      }
 42
 43                      //当oMask运动到当前li上的时候,鼠标已经离开了li了
 44                      aLi[i].onmouseout=function(){
 45                          timer2=setTimeout(function(){//加一个延时定时器,让 oMask 不立即回到0
 46                              bonce( aLi[0].offsetLeft )
 47                          },100)
 48                      }
 49                 }
 50
 51               //在0 - 100 毫秒内,当鼠标在oMask上面的时候,关闭 延时定时器,那么oMask就不会回到0了
 52                 oMask.onmouseover=function(){
 53                     clearInterval( timer2 )
 54                 }
 55
 56                 //当鼠标离开oMask后,再让oMask回到0
 57                 oMask.onmouseout=function(){
 58                     timer2=setTimeout(function(){//加一个延时定时器,让 oMask 不立即回到0
 59                          bonce( aLi[0].offsetLeft );
 60                      },100)
 61                 }
 62
 63                 function bonce(iTarget){
 64
 65                  clearInterval(timer);
 66                  timer=setInterval(function(){
 67                      iSpeed += (iTarget - oMask.offsetLeft)/6;
 68                      iSpeed *= 0.75;
 69                      if( Math.abs( iSpeed ) <= 1 && Math.abs( iTarget - oMask.offsetLeft ) <= 1 ){
 70                          clearInterval(timer);
 71                          oMask.style.left = iTarget +‘px‘;
 72                          oUl2.style.left = -iTarget +‘px‘;
 73                          iSpeed = 0;
 74                      }else{
 75                          left=oMask.offsetLeft + iSpeed; //运动过程中菜单中的字体会有小抖动,修复方法,left值不能直接赋值
 76                          oMask.style.left = left +‘px‘;
 77                          oUl2.style.left = -left + ‘px‘;
 78                          document.title=obj.offsetLeft+‘|‘+iTarget+‘|speed=‘+iSpeed;
 79                      }
 80                  },30)
 81             }
 82             }
 83
 84
 85             /**通过class来获取元素**/
 86             function getByClassName(oParent,tagName,className){
 87                     var arr=[];
 88                     var als=oParent.getElementsByTagName(tagName);
 89                     for(var i=0;i<als.length;i++){
 90                         var a1=als[i].className.split(‘ ‘);
 91                         for(var j=0;j<a1.length;j++){
 92                             if(a1[j]==className){
 93                                 arr.push(als[i]);
 94                                 break;
 95                             }
 96                         }
 97                     }
 98                     return arr
 99             }
100         </script>
101     </head>
102     <body>
103         <ul id="menu">
104             <li id="mask"><!--mask 相当于滚动歌词的div2-->
105                 <ul id="ul2"><!--ul 相当于滚动歌词的div2的span-->
106                     <li>首页</li>
107                     <li>学员</li>
108                     <li>课程</li>
109                     <li>关于</li>
110                     <li>留言</li>
111                     <li>论坛</li>
112                 </ul>
113             </li>
114             <li class="box">首页</li>
115             <li class="box">学员</li>
116             <li class="box">课程</li>
117             <li class="box">关于</li>
118             <li class="box">留言</li>
119             <li class="box">论坛</li>
120         </ul>
121     </body>
122 </html>
时间: 2024-10-18 17:55:21

弹性菜单 加了 透视效果 运动 小案例的相关文章

js弹性运动---弹性菜单

<!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>弹性运动---弹性菜单</title> <style> * { padding: 0; margin: 0; } li { list-style: none; } ul {

反射小案例(菜单的可配置化)

刚开始学反射时,只是知道反射可以获取一个类里的各种信息(字段,属性,方法.....)!前面也只是列举了一些反射的基本语法,下面就通过一个简单小案例体会反射的用法: 注:该案例通过控制台程序完成 反射的基本用法:http://www.cnblogs.com/fengxuehuanlin/p/5274607.html 用的的类库:   调用的主方法: 注:由于是在主方法中调用类库,所以要引用类库这个程序集 控制台程序部分: class Program { static void Main(strin

小案例带你揭秘JS事件

小案例带你揭秘JS事件 ### 什么是事件? 在js中一个事件的组成由那些呢? 谁触发事件:事件源 触发什么事件: 事件的类型 触发事件干什么事:事件处理函数 事件传播的过程 捕获阶段 就是从window事件处理函数开始,依次向内,只要事件目标的事件处理函数都会执行 执行顺序是从上到下的函数执行顺序 目标阶段 你触发在哪个元素上那么这个事件的目标源就是谁 冒泡阶段 从事件目标的时间处理函数开始,依次向外,知道window的事件处理函数触发 执行顺序是从内到外的 事件委托 就是我们把要做的事情委托

Thinkphp 生成订单号小案例

Thinkphp 生成订单号小案例小伙伴们在日常的商城项目开发中,都会遇到订单号生成的问题,今天呢思梦PHP就带领大家去解读一下生成订单号的问题!首先,订单号我们要明确它有有3个性质:1.唯一性 2.不可推测性 3.效率性,唯一性和不可推测性不用说了,效率性是指不能频繁的去数据库查询以避免重复.况且满足这些条件的同时订单号还要足够的短.不知道小伙伴们在日常的项目中是否也和我一样去思考过生成订单的一些小问题,可能你也会说,这些东西不用想的那么复杂,其实呢,小编也是同意大家的看法,但是殊不知我们做程

Session小案例-----简单购物车的使用

Session小案例-----简单购物车的使用 同上篇一样,这里的处理请求和页面显示同样用的都是servlet. 功能实现如下: 1,显示网站的所有商品 2,用户点击购买后,能够记住用户选择的商品 3,实现了多个会话共享一个session 4, 实现了浏览器禁用cookie后数据共享问题的处理 首页: package cn.itcast.shopping; import java.io.IOException; import java.io.PrintWriter; import java.io

两个小案例

今天收获了两个小案例.其实对工作都很有启发,把案例和心得在这里记录下来,希望对别人也有帮助. 案例1: 测试人员在测试系统发现在系统A和系统B之间通过总线通讯,偶尔会出现timeout现象.反馈开发后,开发难以重现.根据简要分析后,认为是测试系统性能不行,拍胸脯保证在生产系统,用于系统通讯的总线不会出现这种问题.测试人员加强了性能测试强度,发现硬件提高后,的确性能测试场景中未能重现timeout.最终否决了缺陷.结果上到生产上后,timeout又出现了,而且对核心业务产生了一定影响(多亏有补救办

几个数据库的小案例(二):极其简单的省市联动

总用有两个文件(frmMain.cs SqlHelper.cs) //frmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace 省市联动

JS小案例分析

a.微博输入删除小案例 <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title> <style> * { margin: 0; padding: 0; } ul { list-style: none; } .box { width: 600px; margin: 100px auto; b

sqoop操作之ETL小案例

Extraction-Transformation-Loading的缩写,中文名称为数据提取.转换和加载.将数据从ORACLE中抽取数据,经过hive进行分析转换,最后存放到ORACLE中去. 本案例是纯demo级别,练手使用 一.需求将emp和dept表的数据分析最后存放到result表. emp和dept表均为oracle自带的表,表结构如下: emp表 EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIRE