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的extend和fn.extend的使用说明
Jan 09 Javascript
event.X和event.clientX的区别分析
Oct 06 Javascript
在JavaScript中构建ArrayList示例代码
Sep 17 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
Jul 07 Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
Jun 13 Javascript
javascript  删除select中的所有option的实例
Sep 17 Javascript
js 两个日期比较相差多少天的实例
Oct 19 Javascript
ES6知识点整理之模块化的应用详解
Apr 15 Javascript
详解50行代码,Node爬虫练手项目
Apr 22 Javascript
iview form清除校验状态的实现
Sep 19 Javascript
java和js实现的洗牌小程序
Sep 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
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
js倒计时抢购实例
2015/12/20 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
Layui实现带查询条件的分页
2019/07/27 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
python类的实例化问题解决
2019/08/31 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
python实现五子棋程序
2020/04/24 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
介绍下static、final、abstract区别
2015/01/30 面试题
优秀的个人求职信范文
2014/05/09 职场文书
垃圾桶标语
2014/06/24 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
甲午大海战观后感
2015/06/02 职场文书