Javascript特效:天猫导航
原创
©著作权归作者所有:来自51CTO博客作者KaiSarH的原创作品,请联系作者获取转载授权,否则将追究法律责任
知识点
- 使用offsetLeft,父标签必须有定位
- 标签.children可以获得子标签数组
- 鼠标进入:mouseover
- 鼠标点击:mousedown
- 鼠标离开:mouseout
运行效果
- 初始状态
- 在不同栏目运动图标会移动
- 点击图标固定
- 离开后会返回上一次点击的位置
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
*{margin: 0;padding: 0;border:0;list-style: none;}
body{background-color: pink;}
#nav{
width: 900px;height: 63px;
background:url("images/doubleOne.png") no-repeat right
center #fff;
border-radius: 5px;position: relative;margin: 100px auto;}
#nav ul{position: relative;}
#nav ul li{float: left;width: 88px;height: 63px;text-align: center;line-height: 70px;cursor: pointer;}
#t_mall{width: 88px;height: 63px;background: url("images/tMall.png") no-repeat;position: absolute;}
</style>
</head>
<body>
<nav id="nav">
<span id="t_mall"></span>
<ul>
<li>双11狂欢</li>
<li>服装会场</li>
<li>数码家电</li>
<li>家具建材</li>
<li>母婴童装</li>
<li>手机会场</li>
<li>美妆会场</li>
<li>进口会场</li>
<li>飞猪旅行</li>
</ul>
</nav>
<script src="../../MyTools/MyTools.js"></script>
<script>
window.addEventListener('load', function (ev) {
// 1. 获取需要的标签
var nav = myTools.$('nav'), t_mall = nav.children[0], ul = nav.children[1], allLis = ul.children;
// 记录鼠标点击元素的位置
var beginX = 0;
// 2. 遍历操作
for (var i = 0; i < allLis.length; i++) {
var li = allLis[i];
// 2.1 监听鼠标的进入
li.addEventListener('mouseover', function () {
end = this.offsetLeft;
});
// 2.2 监听鼠标按下事件
li.addEventListener('mousedown', function () {
beginX = this.offsetLeft;
});
// 2.3 监听鼠标离开事件
li.addEventListener('mouseout', function () {
end = beginX;
});
}
// 3. 缓动动画
var begin = 0, end = 0;
setInterval(function () {
begin += (end - begin) * 0.2;
t_mall.style.left = begin + 'px';
}, 10);
});
</script>
</body>
</html>