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 {
width: 400px;
height: 30px;
position: relative;
margin: 100px auto 0;
}
li {
float: left;
width: 98px;
height: 28px;
line-height: 28px;
border: 1px solid #ccc;
text-align: center;
z-index: 2;
position: relative;
cursor: pointer;
}
.bg {
width: 100px;
height: 5px;
overflow: hidden;
background: red;
border: none;
position: absolute;
top: 24px;
left: 0;
z-index: 1;
}
</style>
<script type="text/javascript">
window.onload=function ()
{
var oUl=document.getElementById('ul1');
var aLi=oUl.getElementsByTagName('li');
var oBg=aLi[aLi.length-1];
var i=0;
for(i=0;i<aLi.length-1;i++)
{
aLi[i].index=i;
aLi[i].onmouseover=function ()
{ // 移动的元素 当前对象 移动的属性
startMove(oBg,this,'left');
};
}
}; // 移动的元素 当前对象 移动的属性
function startMove(obj, index, attr)
{
iTarget=get_offset_val(index, attr);
obj.attr_name=get_offset_val(obj, attr);
if(iTarget==obj.attr_name)
return; // 如果选择的是当前的选中的元素
obj.iSpeed=0;
var iSpeed_dis=5;// 速度比值
var mc =0.7 ; // 摩擦大小 值越大元素停止运动时间越长 值越小元素停止运动的时间越快
// 防止开启多次定时器
clearInterval(obj.timer);
obj.timer=setInterval(backOut, 30); // 弹性运动
function backOut()
{
// 加、减速运动 iTarget>obj.offsetLeft加速运动 iTarget<obj.offsetLeft减速运动
obj.iSpeed+=(iTarget-obj.attr_name)/iSpeed_dis;
// 摩擦运动 让元素停止运动
obj.iSpeed*=mc;
obj.attr_name+=obj.iSpeed; // 防止小数误差 ispeed 不是整数 ,把小数保留下来
//运动速度小1 并且目标点与元素距离小于1 停止运动
if(Math.abs(obj.iSpeed)<=1 && Math.abs(obj.attr_name-iTarget)<=1)
{
obj.style[attr]=iTarget+'px';
clearInterval(obj.timer);
}
else
{
obj.style[attr]= obj.attr_name+'px';
}
} //------------------ backOut() 结束
} // 获取 offset 值
function get_offset_val(obj,attr)
{
switch(attr)
{
case 'left':
return obj.offsetLeft;
break;
case 'top':
return obj.offsetTop;
break;
case 'width':
return obj.offsetWidth;
break;
case 'height':
return obj.offsetHeight;
break;
}
}
</script>
</head> <body>
<ul id="ul1">
<li>首页</li>
<li>关于我们</li>
<li>产品</li>
<li>联系方式</li>
<li class="bg"></li>
</ul>
</body>
</html>
js 弹性菜单的更多相关文章
- 非常酷的jQuery/HTML5图片滑块特效 带弹性菜单
新的一周刚刚开始,当我迷迷糊糊坐在办公桌前时,又不自主的去看了一些jQuery和HTML5的应用插件,今天我们来看一款非常酷的jQuery/HTML5图片滑块特效,这款插件的特点是图片上不错的弹性菜单 ...
- JS树形菜单
超全的JS树形菜单源代码共享(有实例图) 树形菜单是很常用的效果,常用在管理软件当中,但是一套树形菜单已经不能满足需求,所以如果能有一套比较全面的树形菜单JS特效代码,将会非常方便,下面懒人萱将超全的 ...
- js矩阵菜单或3D立体预览图片效果
js矩阵菜单或3D立体预览图片效果 下载地址: http://files.cnblogs.com/elves/js%E7%9F%A9%E9%98%B5%E8%8F%9C%E5%8D%95%E6%88% ...
- 顶 兼容各种浏览器js折叠菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Js弹性漂浮广告代码
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- 基于Bootstrap Ace模板+bootstrap.addtabs.js的菜单
这几天研究了基于bootstrap Ace模板+bootstra.addtabs.js实现菜单的效果 参考了这个人的博客 https://www.cnblogs.com/landeanfen/p/76 ...
- 适合移动手机使用的js环形菜单特效插件
blooming-menu是一款适合在移动手机上使用的js环形菜单插件.该环形菜单提供了众多的參数,通过结合CSS3动画制作出效果很炫酷的圆形菜单展开和隐藏动画效果. 以下是这个圆形菜单菜价的可用參数 ...
- jquery.smint.js 页面菜单浮动之谷歌浏览器异常
jquery.smint.js 做公司项目时,谷歌测试,页面向下拉,刷新后,导航栏菜单与顶部距离发生变动,并不在设置的relative元素top下固定像素 我的relative元素的高为80,然后在j ...
- js侧边菜单
目标 实现一个侧边栏菜单,最多二级,可以收起展开.用于系统左侧的主菜单. 大多数系统都会有这样的菜单,用于导航功能,切换到不同的操作页面.在单页应用系统中,菜单一般是固定在左侧,分组节点上配图标,高亮 ...
随机推荐
- CentOS6.5 安装ORACLE 安装界面乱码解决方案
在终端运行 export LANG=EN_US 然后再执行安装程序
- viewpagerindicator+UnderlinePageIndicator+ viewpage切换
布局文件activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi ...
- day70 12-存储过程和存储函数
什么是相关子查询? 这是一个子查询,子查询本身又是一个多表查询.where不能用组函数,但是可以用字符函数instr().除了order by排序没有考,查询语句的所有内容都考了.这个题有点难度. 今 ...
- Hbuilder实用技巧(转)
Hbuilder实用技巧 原创 2016年05月19日 10:25:42 标签: hbuilder 操作 16551 1. Q:怎么实现代码追踪? A:在编辑代码时经常会出现需要跳转到引用文件或者变量 ...
- python pip ez_setup.py
#!/usr/bin/env python """Bootstrap setuptools installation To use setuptools in your ...
- 算法Sedgewick第四版-第1章基础-011一用链表实现bag、queue、stack
1. package algorithms.ADT; /************************************************************************ ...
- R: 主成分分析 ~ PCA(Principal Component Analysis)
本文摘自:http://www.cnblogs.com/longzhongren/p/4300593.html 以表感谢. 综述: 主成分分析 因子分析 典型相关分析,三种方法的共同点主要是用来对数据 ...
- ZROI2018提高day6t1
传送门 分析 我们发现这个四元组可以分解成一个逆序对拼上一个顺序对,这个线段树搞搞然后乘一下就可以求出来了,但是我们发现可能有(a,b)为逆序对且(b,c)为顺序对的情况,所以要进行容斥,我们只需要枚 ...
- Bootstrap 组件之 Nav
一.简介 Nav 指导航页.这里 是一个线上例子. 使用了 .nav 的标签就是一个 Nav.下面举例. {注意} 记住,下面的几种导航页都依赖 .nav. 二.导航页 添加 .nav-tabs. & ...
- 20169219 《Linux内核原理与分析》 第十周作业
进程地址空间 1.进程地址空间由进程可寻址的虚拟内存组成.Linux系统中的所有进程之间以虚拟方式共享内存. 2.进程只能访问有效内存区域内的内存地址. 内存区域可以包含各种内存对象: (1) 代码段 ...