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对表单操作2
Apr 06 Javascript
jQuery Tools tooltip使用说明
Jul 14 Javascript
js innerHTML 改变div内容的方法
Aug 03 Javascript
javascript正则表达式之search()用法实例
Jan 19 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
Mar 02 Javascript
js实现无缝循环滚动
Jun 23 Javascript
vue axios用法教程详解
Jul 23 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
Jun 14 Javascript
使用vue-infinite-scroll实现无限滚动效果
Jun 22 Javascript
vue-cli3 从搭建到优化的详细步骤
Jan 20 Javascript
vue实现图片上传到后台
Jun 29 Javascript
使用Typescript开发微信小程序的步骤详解
Jan 12 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
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
DOM 基本方法
2009/07/18 Javascript
JavaScript 函数调用规则
2009/09/14 Javascript
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
使用post方法实现json往返传输数据的方法
2019/03/30 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
Python语言的面相对象编程方式初步学习
2016/03/12 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
Python中dict和set的用法讲解
2019/03/28 Python
python中 * 的用法详解
2019/07/10 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
python中有帮助函数吗
2020/06/19 Python
python字典与json转换的方法总结
2020/12/28 Python
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
财产公证书样本
2014/04/04 职场文书
国际贸易求职信
2014/07/05 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
安全教育日主题班会
2015/08/13 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python