淘宝侧边服务模块图如下:

当我们把鼠标移到充话费这个模块上时,上面的图标会有一个快速的向上移动然后又回到原来位置的过程。
仔细观察后,可以将这个动画过程分解为三步:

  1. 图片向上移出并消失:这一步主要是靠改变top属性的值和opacity来实现。

  2. 图片将top设置为一个固定值,这个值将会作为为下一步动画执行时的初始值:这一步只需改变top值。

  3. 图片回归到原来的位置并显示:改变top和opacity来实现。

    通过以上步骤的分解,实现过程就比较的简单了,只需要适当的增加动画效果便可以实现。下面是利用了js,jquery,css3这三种方式来实现该效果的代码。

原生js实现

    window.onload = function() {var oMove = document.getElementById('tab-list'),aList = oMove.getElementsByTagName('a');for(var i = 0, len = aList.length; i < len; i++) {aList[i].onmouseover = function() {var _this = this.getElementsByTagName('i')[0];startMove(_this, {'top':-25,'opacity':0},function() {_this.style.top = '40px';startMove(_this,{top:20,opacity:100});});}}}function startMove(elem,options,fn) {var iCur = 0,speed = 0,flag = true;**clearInterval(elem.timer);**elem.timer = setInterval(function() {for(var attr in options) {flag = true;iCur = 0;if(attr === 'opacity') {iCur = Math.round( parseFloat(getStyle(elem, attr)) * 100 ); } else {iCur = parseInt(getStyle(elem, attr));}speed = (options[attr] - iCur) / 8; speed = speed > 0?Math.ceil(speed): Math.floor(speed);if(iCur !== options[attr]) {flag = false;}if(attr === 'opacity') {elem.style.filter = 'alpha(opacity=' + (iCur + speed) + ')';elem.style.opacity = (iCur + speed) / 100;}else {elem.style[attr] = iCur + speed + 'px';}}**if(flag) {clearInterval(elem.timer);if(fn) {fn();}}**}, 30);}function getStyle(obj, attr) {if(obj.currentStyle) {return obj.currentStyle[attr];}else {return getComputedStyle(obj, null)[attr];}}

这里主要是利用了定时器的效果来实现的。需要注意的几个地方如下:
第一:注意在每次执行startMove()之前首先要清除掉定时器,否则多个动画之间会相互争抢定时器。
第二:这里的speed的计算方式根据当前值与目标值的差值计算,这样当差值越大速度也就越快。
第三:当某一个效果值与目标值相等时不能直接清除定时器,需要先判断,因为可能有其他效果没完成,必须等到所有的动画效果都完成时才能清除定时器执行回调函数。

jQuery实现
利用jquery的animate来实现该效果特别的简单,代码如下:

$('.tab-list').on('mouseover','.mod a', function() {var $iTag = $(this).find('i');$iTag.animate({'top':'-25px','opacity':0},300, function() {$iTag.css('top','35px');$iTag.animate({'top':'20px','opacity':100},300)});
})

css3实现

.mod a i:hover {-webkit-animation: up-down ease-in-out 0.5s;
}
@-webkit-keyframes up-down {0% {opacity:1;-webkit-tranform:translateY(0px);}50% {opacity:0;-webkit-transform:translateY(-25px);}75% {opacity:0;-webkit-transform:translateY(35px);}100% {opacity:1;-webkit-trnasform:translateY(-10px);}
}

利用animation属性和tranform便可以实现,也特别的简单。

下面是html结构:

<div class="container"><ul class="tab-list" id="tab-list"><li class="mod"><a href="javascript:;"><i class="td-icon icon1"></i><span>充值</span></a></li><li class="mod"><a href="javascript:;"><i class="td-icon icon2"></i><span>汉堡</span></a></li><li class="mod"><a href="javascript:;"><i class="td-icon icon3"></i><span>黄冠</span></a></li><li class="mod"><a href="javascript:;"><i class="td-icon icon4"></i><span>进口商品</span></a></li><li class="mod"><a href="javascript:;"><i class="td-icon icon5"></i><span>咖啡</span></a></li><li class="mod"><a href="javascript:;"><i class="td-icon icon6"></i><span>喵鲜生</span></a></li><li class="mod"><a href="javascript:;"><i class="td-icon icon7"></i><span>奶瓶</span></a></li><li class="mod"><a href="javascript:;"><i class="td-icon icon8"></i><span>内衣</span></a></li><li class="mod"><a href="javascript:;"><i class="td-icon icon9"></i><span>生日礼物</span></a></li><li class="mod"><a href="javascript:;"><i class="td-icon icon10"></i><span>生鲜水果</span></a></li><li class="mod"><a href="javascript:;"><i class="td-icon icon11"></i><span>食品</span></a></li><li class="mod"><a href="javascript:;"><i class="td-icon icon12"></i><span>手机</span></a></li></ul></div>

css代码如下:

* {margin:0;padding:0;
}
ul, li {list-style-type:none;
}
body {position:relative;font:12px/1.5 tahoma,arial,'Hiragino Sans GB',\5b8b\4f53,sans-serif;
}
.container{position:relative;width:240px;margin:0 auto;margin-top:50px;}
.container .tab-list {position:absolute;left:0;top:0;width:100%;overflow:hidden;border:1px solid #ff4400;}
.tab-list .mod {float:left;width:57px;/*height:76px;*/
}
.mod a {position:relative;display:block;height:100%;text-align:center;text-decoration:none;color:#6c6c6c;padding:10px 0;overflow:hidden;
}
.mod a:hover {color:#ff4400;}
.mod a i {position:absolute;display:block;top:20px;width:36px;height:36px;margin-left:10px;opacity:1;filter:alpha(opacity=100);}
.mod a i:hover {-webkit-animation: up-down ease-in-out 0.5s;
}
.mod a span {display:block;margin-top:56px;height:10px;}
.mod .icon1 {background:url('../img/iconfont-chongzhi.png') no-repeat;
}
.mod .icon2 {background:url('../img/iconfont-hanbao.png') no-repeat;
}
.mod .icon3 {background:url('../img/iconfont-huangguan.png') no-repeat;
}
.mod .icon4 {background:url('../img/iconfont-jinkoushangpin.png') no-repeat;
}
.mod .icon5 {background:url('../img/iconfont-kafei.png') no-repeat;
}
.mod .icon6{background:url('../img/iconfont-miaoxiansheng.png') no-repeat;
}
.mod .icon7{background:url('../img/iconfont-naiping.png') no-repeat;
}
.mod .icon8{background:url('../img/iconfont-neiyi.png') no-repeat;
}
.mod .icon9{background:url('../img/iconfont-shengriliwu.png') no-repeat;
}
.mod .icon10{background:url('../img/iconfont-shengxianshuiguo.png') no-repeat;
}
.mod .icon11{background:url('../img/iconfont-shipin.png') no-repeat;
}
.mod .icon12{background:url('../img/iconfont-shouji.png') no-repeat;
}@-webkit-keyframes up-down {0% {opacity:1;-webkit-tranform:translateY(0px);}50% {opacity:0;-webkit-transform:translateY(-25px);}75% {opacity:0;-webkit-transform:translateY(35px);}100% {opacity:1;-webkit-trnasform:translateY(-10px);}
}

以上便是全部的实现。

模拟淘宝侧边服务模块鼠标悬停效果的三种实现方式总结相关推荐

  1. 【python】模拟淘宝的客服自动回复系统-socket,json,time模块的应用

    最近在研究soctet模块的过程中,尝试做个小的练习,第一反应是做个类似qq或者微信的即时聊天,这个需求相对比较简单,采用UDP协议很快就可以实现,为了提高点难度,于是决定尝试模拟淘宝的自动回复功能, ...

  2. HTML+CSS零基础学习笔记(五)— 模拟淘宝首页(静态)

    内容概览 模拟淘宝首页(静态) 一.项目重难点 二.效果图及源码 模拟淘宝首页(静态) 一.项目重难点 样式重置:在实际开发过程中,我们往往会新建一个单独的CSS文件(reset.css),用于对应H ...

  3. 零基础带你用python模拟淘宝登录

    经过一段时间的学习,并参考各路大神的文章,总结出一些比较适合小白的网络爬虫的小技巧.跟着笔者的思路,循序渐进,可以慢慢找到一点小感觉. 开发环境 笔者选用的是vs code,轻量级,支持各种插件安装. ...

  4. jquery+原生js模拟淘宝输入框下拉提示

    1.概述: 模拟淘宝.百度的搜索框,当用户输入时,会自动下拉提示关键字,使用组件jquery.js(1.12.1),jquery-ui.js(1.12.1).jquery-ui.css(1.12.1) ...

  5. 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...

    数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...

  6. Python+Selenium模拟淘宝滑块并爬取商品数据

    注:如果侵犯了Alibaba的权益,请联系我删除. 上一篇博客已经完成了模拟淘宝登陆,本节主要记录如何爬取淘宝商品列表页数据,同时如何模拟人的操作完成滑块的验证. 代码如下: #encoding=ut ...

  7. 天猫淘宝企业服务为中小微企业打造供应链智能协同网络,让采购不再将就!丨爱分析报告

    编者按:近日天猫淘宝企业服务&爱分析联合发布<2023中小微企业电商采购白皮书>,为中小微企业采购数字化带来红利. 某水泵企业:线上客户主要是中小微企业,线上业绩遇到瓶颈,如何突破 ...

  8. selenium模拟淘宝登陆

    使用selenium打开浏览器,模拟人工进行淘宝的登陆活动可以在网上找到两种解决方案. 第一种方案是打开网站后,通过find_element_by_xpath 依次寻找用户名录入框,密码录入框,登陆按 ...

  9. python爬虫淘宝登录_python爬虫实现模拟淘宝登录

    就算所有人都不支持你.这条路会很曲折,你也会一度认为是不是自己选错了,但只要坚持,就算最后没有成功,但努力了就不会有遗憾. python爬虫模拟淘宝登录 小贴士 这个爬虫和搜索引擎的爬虫是有区别的.搜 ...

最新文章

  1. 体验是情感的(译稿)
  2. Docker视频发布
  3. 生产者与消费者(三)---BlockingQueue
  4. 浅析图片XSS中的哪些技术问题
  5. bitbucket迁移
  6. 高性能日志框架 Log4a 原理分析
  7. java inputstream api_Java 读取/转换 InputStream 为字符串
  8. 以A表中的值快速更新B表中记录的方法
  9. 英特尔核显自定义分辨率_让免费的核显更好用!英特尔酷睿集成的GPU如何优化?...
  10. Windows下UEFI环境的搭建
  11. Linux 下配置 Hadoop2.x 高可用 zookeeper Yarn,详细步骤。
  12. python调用系统命令_Python调用外部系统命令
  13. 【nginx】nginx 反向代理 指令说明
  14. asp.net常见数据类型
  15. seleniuim面试题1
  16. 《深度学习Python实践》附录——决策树模型可视化
  17. Asp.net mvc 网站之速度优化 -- Memcache
  18. Python基本图形绘制:turtle库
  19. 计算机资源,来自verycd,排行榜
  20. 深度linux如何打开exe文件,在深度系统中直接运行exe文件的方法

热门文章

  1. 产品学习:智能生产调度管理系统
  2. 戴尔台式计算机型号怎么查,戴尔台式电脑型号的查询方法
  3. html 5新增技术,HTML5新增元素,标签总结
  4. 计算机快速启动BIOS,掌握50个电脑BIOS启动快捷键,再也不为装系统发愁了!
  5. 还不会用Vue写出的excel表实现pdf导出吗?来,豪豪手把手教你
  6. python画误差棒_Python数据处理从零开始----第四章(可视化)(3)散点图和误差棒...
  7. 基于机智云的智能花盆2.0
  8. 对接阿里云号码认证服务H5方案
  9. svg基础+微信公众号交互(二)
  10. neo4j CQL使用