JavaScript实现精美个性导航栏筋斗云效果


Posted in Javascript onOctober 29, 2017

实现效果:

实现效果如下图所示

JavaScript实现精美个性导航栏筋斗云效果

实现原理:

什么是筋斗云效果:

•这个效果很简单,就是鼠标移到其他导航目录时会有背景图片跟着鼠标滑动到当前的目录。

实现思路:

•鼠标经过的时候,利用offsetLeft获得当前盒子距离左侧的距离,把这个值赋给缓动动画的end值。
•当点击的时候记住当前的offsetLeft值,当鼠标经过的时候把之前点击的offsetLeft给现在经过时候的值。

实现代码:

下面是实现代码以及详细注释,核心设置一个position为absolute的span标签,通过绑定鼠标事件,用封装好的animate动画实现span的“筋斗云”效果。

<!DOCTYPE html>
<html>
<head>
  <title>导航栏筋斗云效果</title>
  <meta charset="utf-8">
  <style type="text/css">
    *{
      padding: 0;
      margin: 0;
    }
    body{
      background-color: rgba(0, 0, 0, 0.6);
    }
    .box{
      width: 415px;
      height: 42px;
      margin: 200px auto;
      background-color: #fff;
      position: relative;
    }
    ul{
      list-style: none;
      position: relative;
    }
    li{
      float: left;
      width: 83px;
      height: 42px;
      text-align: center;
      font: 500 15px/42px "微软雅黑";
      cursor: pointer;
    }
    span{
      position: absolute;
      left: 0;
      top: 0;
      width: 83px;
      height: 42px;
      background-image: linear-gradient(to right,#03c03c 50% ,#51ee5d 100%);
    }
  </style>
</head>
<body>
<div class="box">
  <span></span>
  <ul>
    <li>菜单栏1</li>
    <li>菜单栏2</li>
    <li>菜单栏3</li>
    <li>菜单栏4</li>
    <li>菜单栏5</li>
  </ul>
</div>
<script type="text/javascript">
  window.onload = function(){
    // 鼠标放在哪个li上面,span对应一道到哪里,移开后回到原位置
    var liArr = document.getElementsByTagName("li");
    var liWidth = liArr[0].offsetWidth;
    var span = document.getElementsByTagName("span")[0];
    // 计数器
    var cnt = 0;
    // for循环绑定事件
    for(var i=0; i<liArr.length; i++){
      // 自定义属性,然后绑定index属性为索引值
      liArr[i].index = i;
      // 鼠标进入事件
      liArr[i].onmouseover = function(){
        // 然span运动到该li的索引值位置
        animate(span, this.index*liWidth);
      }
      // 鼠标移开
      liArr[i].onmouseout = function(){
        // span运动到原位置
        animate(span, cnt*liWidth);
      }
      // 点击事件
      liArr[i].onclick = function(){
        // 计数器记录当前标签索引值
        cnt = this.index;
        animate(span, cnt*liWidth);
      }
    }
    // 缓动动画封装
    function animate(element, target){
      // 清除间歇调用
      clearInterval(element.timer);
      // 设置超时调用
      element.timer = setInterval(function(){
        // 设置步数
        var step = (target - element.offsetLeft)/10;
        // 调整步数
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        // 设置样式
        element.style.left = element.offsetLeft + step + "px";
        // console.log(1);
        if(Math.abs(target - element.offsetLeft) < Math.abs(step)){
          element.style.left = target + "px";
          clearInterval(element.timer);
        }
      }, 20);
    }
  }
</script>
</body>
</html>

总结

以上所述是小编给大家介绍的JavaScript实现精美个性导航栏筋斗云效果,希望对大家有所帮助!

Javascript 相关文章推荐
Jquery操作Select 简单方便 一个js插件搞定
Nov 12 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
Apr 02 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
Jan 16 Javascript
js动态为代码着色显示行号
May 29 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
Feb 19 Javascript
JavaScript原生对象之Number对象的属性和方法详解
Mar 13 Javascript
jQuery检测返回值的数据类型
Jul 13 Javascript
深入理解JS函数的参数(arguments)的使用
May 28 Javascript
input 标签实现输入框带提示文字效果(两种方法)
Oct 09 Javascript
详解Element 指令clickoutside源码分析
Feb 15 Javascript
Layui数据表格 前后端json数据接收的方法
Sep 19 Javascript
javascript实现贪吃蛇小游戏
Jul 28 Javascript
vue中的scope使用详解
Oct 29 #Javascript
Vue.js划分组件的方法
Oct 29 #Javascript
vue.js  父向子组件传参的实例代码
Oct 29 #Javascript
vue.js todolist实现代码
Oct 29 #Javascript
javascript按钮禁用和启用的效果实例代码
Oct 29 #Javascript
jQuery实现切换隐藏与显示同时切换图标功能
Oct 29 #jQuery
bootstrap table sum总数量统计实现方法
Oct 29 #Javascript
You might like
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
用javascript实现的图片马赛克后显示并切换加文字功能
2007/04/21 Javascript
javascript英文日期(有时间)选择器
2007/05/02 Javascript
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
JavaScript两个变量交换值的实现方法
2017/03/01 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
Python正则表达式使用经典实例
2016/06/21 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python 常用 PEP8 编码规范详解
2017/01/22 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
python使用KNN算法手写体识别
2018/02/01 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
python实现AES加密和解密
2019/03/27 Python
Python控制Firefox方法总结
2019/06/03 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
2014年质量管理工作总结
2014/12/01 职场文书
Python基础详解之描述符
2021/04/28 Python
python之django路由和视图案例教程
2021/07/26 Python