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的让textarea自适应高度的插件
Aug 03 Javascript
datagrid框架的删除添加与修改
Apr 08 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
Jun 19 Javascript
javascript制作幻灯片(360度全景图片)
Jul 28 Javascript
js 声明数组和向数组中添加对象变量的简单实例
Jul 28 Javascript
微信小程序 动态传参实例详解
Apr 27 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
Jun 09 Javascript
浅谈VUE监听窗口变化事件的问题
Feb 24 Javascript
监控微信小程序中的慢HTTP请求过程详解
Jul 05 Javascript
js判断非127开头的IP地址的实例代码
Jan 05 Javascript
javascript实现用户必须勾选协议实例讲解
Mar 24 Javascript
Vue.Draggable实现交换位置
Apr 07 Vue.js
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 mysql数据库操作分页类
2008/06/04 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
简单谈谈python中的语句和语法
2017/08/10 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
python实现程序重启和系统重启方式
2020/04/16 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
Linux内核产生并发的原因
2012/07/13 面试题
Linux的文件类型
2016/07/05 面试题
丑小鸭教学反思
2014/02/03 职场文书
升学宴演讲稿
2014/09/01 职场文书
房产公证委托书范本
2014/09/20 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
2014小学年度工作总结
2014/12/20 职场文书
Python使用pyecharts控件绘制图表
2022/06/05 Python