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 相关文章推荐
Javascript之文件操作
Mar 07 Javascript
js jquery做的图片连续滚动代码
Jan 06 Javascript
为JavaScript添加重载函数的辅助方法
Jul 04 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
Jun 20 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
Apr 30 Javascript
微信小程序 框架详解及实例应用
Sep 26 Javascript
微信小程序实现省市区三级地址选择
Jun 21 Javascript
详解Vue、element-ui、axios实现省市区三级联动
May 07 Javascript
javascript删除数组元素的七个方法示例
Sep 09 Javascript
javascript实现雪花飘落效果
Aug 19 Javascript
详解Vue3 Teleport 的实践及原理
Dec 02 Vue.js
vue+spring boot实现校验码功能
May 27 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实时显示输出
2008/10/02 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
phpmail类发送邮件函数代码
2012/02/20 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
在JavaScript中重写jQuery对象的方法实例教程
2014/08/25 Javascript
贴近用户体验的Jquery日期、时间选择插件
2015/08/19 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
环境科学专业优秀毕业生自荐书
2014/02/03 职场文书
四风问题自查报告剖析材料
2014/02/08 职场文书
升旗仪式主持词
2014/03/19 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
争先创优个人总结
2015/03/04 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
初中体育教学随笔
2015/08/15 职场文书
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python