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 相关文章推荐
脚本收藏iframe
Jul 21 Javascript
一些相见恨晚的 JavaScript 技巧
Apr 25 Javascript
jquery获得keycode的示例代码
Dec 30 Javascript
Javascript表单验证要注意的事项
Sep 29 Javascript
node.js操作mongoDB数据库示例分享
Nov 26 Javascript
javascript图片预加载实例分析
Jul 16 Javascript
bootstrap datepicker限定可选时间范围实现方法
Sep 28 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
May 02 Javascript
JS实现websocket长轮询实时消息提示的效果
Oct 10 Javascript
微信小程序中使用ECharts 异步加载数据的方法
Jun 27 Javascript
vue左侧菜单,树形图递归实现代码
Aug 24 Javascript
js实现鼠标拖曳效果
Dec 30 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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
NO3第三帝国留言簿制作过程
2006/10/09 PHP
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
PHP中uploaded_files函数使用方法详解
2011/03/09 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
PHP运行模式汇总
2016/11/06 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
使用Python &amp; Flask 实现RESTful Web API的实例
2017/09/19 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
优秀电子工程系毕业生求职信
2014/05/24 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
深入理解redis中multi与pipeline
2021/06/02 Redis