效果展示

实现原理

请看以下源代码。



<div class="ph-nav" data-pdt-block="pheader-n">
<div class="ph-nav_shadow" style="left: 0px; width: 62px;"></div>
<ul>
<li class="ph-nav_item ph-nav_item--current">
<a href="/">
首页 </a>
</li>
<li class="ph-nav_item">
<a href="/all">
全部
</a>
</li>
...
</ul>
</div>

绿色的框对应的代码是class为ph-nav_shadow的div。
通过jquery来改变遮罩层(.ph-nav_shadow)的left与width值,css3加上动画效果实现绿色框的动画。
通话jquery对li标签类的添加与删除实现文字颜色的变化。(.ph-nav_item--current)。


具体实现

编写html代码

  <header>
<div class="w">
<div class="header_logo l"><img src="img/logo.png" alt=""></div>
<div class="header_nav r">
<div class="header_nav_shadow"></div>
<ul>
<li class="header_nav_li-hover"><a href="">首页</a></li>
<li><a href="">智能家居</a></li>
<li><a href="">案例展示</a></li>
<li><a href="">致创能源</a></li>
<li><a href="">答疑解惑</a></li>
<li><a href="">合作加盟</a></li>
</ul>
</div>
</div>
</header>

编写css代码

.header_nav{
width: 592px;
height: 50px;
position: relative;
}
.header_nav_shadow{
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 72px;
background: #F29400;
transition: all ease-in-out .3s;
z-index: 1;
}
.header_nav ul li{
display: block;
float: left;
overflow: hidden;
height: 50px;
line-height: 50px;
transition: all ease-in-out .3s;
position: relative;
z-index: 2;
}
.header_nav_li-hover a{
color: #fff;
}
.header_nav ul li a{
display: block;
padding: 0 20px;
height: 50px;
line-height: 50px;
transition: all ease-in-out .3s;
}

编写js代码(主要)

$(document).ready(function() {
$(".header_nav ul li").hover(function() { var change = getLiData($(this));
$(".header_nav_shadow").css('left',change[0]).width(change[1]);
$(".header_nav ul").children("li:first-child").removeClass("header_nav_li-hover");
$(this).addClass("header_nav_li-hover");
}, function() {
$(".header_nav_shadow").css('left',0).width('72');
$(this).removeClass("header_nav_li-hover");
$(".header_nav ul").children("li:first-child").addClass("header_nav_li-hover");
});
});
// 根据this li 获取需要改变的长度和偏移量
function getLiData(li){
var left = 0;
for(let i=0;i<li.index();i++){
left+=$(".header_nav ul li:eq("+i+")").width();
}
var change=[left,li.width()];
return change;
}

这里只贴了部分代码,所有代码下载:链接:https://pan.baidu.com/s/1o9vyQDk 密码:k86z
我是新手,有不足的问题希望提出。

最新文章

  1. jsoup获取图片示例
  2. React 生命周期
  3. JavaScript学习记录总结(五)——servlet将json数据写出去
  4. Mac Air maven 环境配置
  5. R语言数据类型转换
  6. NULL &amp; nil &amp; Nil &amp; NSNULL的区别
  7. Scala中的语言特性是如何实现的(3) -- Trait
  8. memcahced缓存特点
  9. JAVA-基本知识
  10. 在代码中控制UI界面
  11. vue之nextTick全面解析
  12. Redis缓存穿透和缓存雪崩以及解决方案
  13. springboot+mybatis+dubbo+aop日志第二篇
  14. 深度学习框架Keras介绍及实战
  15. Linux命令之grep
  16. sql 更新多条记录
  17. 大数据调错系列之:自己总结的myeclipse连接hadoop会出现的问题
  18. 将日期转换为指定的格式:比如转换成 年月日时分秒 这种格式:yyyy-MM-dd hh:mm:ss 或者 yyyy-MM-dd。总结下。
  19. HDU 4699 Editor (2013多校10,1004题)
  20. WebUploader文件图片上传插件的使用

热门文章

  1. 为什么说Python采用的是基于值的内存管理模式?
  2. The minimal unique substring CodeForces - 1159D (构造)
  3. MySQL性能优化(二):优化数据库的设计
  4. div+css布局教程(1)
  5. celery 分布式异步队列框架使用方法
  6. Hyperledger Fabric(2)共识与交易
  7. scala下划线的作用
  8. Python 3.8测试阶段正式开始,发布Beta 1版
  9. 变分推断到变分自编码器(VAE)
  10. touch cyusbConfig.cmake