Javascript动画效果(4)


Posted in Javascript onOctober 11, 2016

前面我们自己写了一个小小的关于js动画的插件,下面我们来使用之前的框架来完成我们想要的动画效果。我们经常在淘宝网中看到,鼠标经过某一图片时,该图片有从上滚出而又从下滚入的效果,那么那种效果是如何实现的呢?

首先我们我们完成该效果的html和css代码,代码如下:
html部分代码:

<div id="move">
 <a href="#"><i><img src="images/1.jpg"/></i><p>彩票</p></a>
 <a href="#"><i><img src="images/2.jpg"/></i><p>电影</p></a>
 <a href="#"><i><img src="images/3.jpg"/></i><p>点外卖</p></a>
 <a href="#"><i><img src="images/4.jpg"/></i><p>理财</p></a>
 <a href="#"><i><img src="images/6.jpg"/></i><p>找服务</p></a>
 <a href="#"><i><img src="images/7.jpg"/></i><p>音乐</p></a>
 <a href="#"><i><img src="images/8.jpg"/></i><p>水煤电</p></a>
 <a href="#"><i><img src="images/9.jpg"/></i><p>火车票</p></a>
</div>

css部分代码:

*{ margin: 0; padding: 0; }
#move{ padding: 10px; width: 400px; background-color: #f4f4f4; margin: 10px auto; border: 1px solid #ccc; border-radius: 10px; }
#move a{ color: #3c3c3c; display: inline-block; width: 58px; height: 25px; border: 1px solid #ddd; border-radius: 3px; background-color: #fff; margin: 10px 17px; position: relative; padding-top: 40px; font-size: 12px; text-decoration: none; line-height: 25px; overflow: hidden; }
#move a i{ position: absolute; top: 10px; left: 0; display: inline-block; width: 100%; text-align: center; fliter:alpha(opacity=100); opacity:1; }
#move a p{ text-align: center; } #move a:hover{ color: #F40; }
#move img{ border: none; }

【用自制动画js插件来实现】

首先我们应该引入我们的插件:foodoir.animate.js,然后我们就可以写我们想要的动画效果了,代码如下:

window.onload = function() {
 var oMove = document.getElementById('move');
 var oA = oMove.getElementsByTagName('a');
 for(var i = 0; i < oA.length; i++) {
  oA[i].onmouseenter = function() {
   var _this = this.getElementsByTagName('i')[0];
   startMove(_this, {
    top: -15,
    opacity: 0
   }, function() {
    _this.style.top = 20 + 'px';
    startMove(_this, {
     top: 10,
     opacity: 100
    });
   });
  }
 }
};

注意:在这里我们用的是onmouseenter代替onmouseout,目的是防止鼠标事件的多次触发。另外在执行后一个函数之前,我们先让i的位置到top:20px位置处,这样我们看到的将是滚动效果,代码:_this.style.top = 20 + 'px';

【用jquery框架来实现】

我们引入官方jquery框架后,写如下代码:

$(document).ready(function() {
 $('#move a').mouseenter(function() {
  $(this).find('i').animate({
   top: "-15px",
   opacity: "0"
  }, 300, function() {
   $(this).css({
    top: "20px"
   })
   $(this).animate({
    top: "10px",
    opacity: "1"
   }, 200)
  })
 })
})

 下面我们通过一张图片来比较jquery和原生js的异同点,如图:

Javascript动画效果(4)

不同点:

1、两种方法的加载方式的写法不同,在jquery中是$(document).ready(),而在原生js中是window.onload = function(){};

2、由于jquery对很多方法进行了封装,二者间获取元素的方法也不同,在jquery中是$(...),而在原生js中是DOM操作符来获取;

3、紧跟着jquery通过$(this).find('i')函数就将所有需要改变的i得到了,在原生js中,我们还需要通过for方法来遍历所需要的i;

4、在jquery中是mouseenter后接函数,然户在函数中获取i然后对i进行相应操作(我们所看到的代码中好像不涉及操作是否对应了具体的i),而在原生js中是先获取到‘i',然后进行onmouseenter事件,其对应的是一个函数,且在当前函数中要进一步获取到具体的i;

5、在jquery中是通过animate函数来控制动画,这个是jquery封装好的,而在原生js中是通过startMove函数来控制动画,而startMove使我们自己封装在foodoir.animate.js的一个函数;

6、虽然都是用json传值,但是传的值不一样(比如说带单位和没带单位),这个就跟我们自己封装的插件有关;

7、在jquery中,还多了一个数值300(200),这个在jquery中表示速度,而我们的插件中,直接对速度也进行了封装,如果我们再要去改变运动的速度,我们需要自己在foodoir.animate.js中修改; 

相同点:

1、都是在页面加载完后进行

2、对于同时运动,都是采用json传值

小结:在这,我们能很明显的看到,写jquery代码比原生js代码少,且要方便很多。以后可以先研究原生js的实现方法,再去思考jquery为什么要这样去实现,这样学的更快,了解的东西越多,出错的概率也会减少。其次就是对于我们之前的插件,与jquery进行比较后觉得还有很多需要改进的地方。

在这里我们的Javascript动画就告一段落了,后面有新的需求会继续更新~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 一个自定义长度的文本自动换行的函数
Aug 19 Javascript
Prototype源码浅析 String部分(四)之补充
Jan 16 Javascript
面向对象的Javascript之一(初识Javascript)
Jan 20 Javascript
为EasyUI的Tab标签添加右键菜单的方法
Jul 14 Javascript
JQuery中clone方法复制节点
May 18 Javascript
javascript常用函数(2)
Nov 05 Javascript
利用python分析access日志的方法
Oct 26 Javascript
详解A标签中href=&quot;&quot;的几种用法
Aug 20 Javascript
js中的深浅拷贝问题简析
May 10 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
Oct 11 Javascript
解决axios post 后端无法接收数据的问题
Oct 29 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
Mar 03 Javascript
JavaScript中const、var和let区别浅析
Oct 11 #Javascript
对javascript继承的理解
Oct 11 #Javascript
Javascript动画效果(3)
Oct 11 #Javascript
JavaScript实现自动切换图片代码
Oct 11 #Javascript
Javascript动画效果(2)
Oct 11 #Javascript
Javascript动画效果(1)
Oct 11 #Javascript
原生Javascript和jQuery做轮播图简单例子
Oct 11 #Javascript
You might like
PHP新手上路(四)
2006/10/09 PHP
PHP的面试题集
2006/11/19 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
PHP实现远程下载文件到本地
2015/05/17 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
提高php编程效率技巧
2015/08/13 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
JQuery点击行tr实现checkBox选中的简单实例
2016/05/26 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
不要用强制方法杀掉python线程
2017/02/26 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
2021/01/27 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
财务管理专业应届毕业生求职信
2013/09/22 职场文书
专营店会计助理岗位职责
2013/11/29 职场文书
2014年安全生产责任书
2014/07/22 职场文书
诚实守信演讲稿
2014/09/01 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android
Python必备技巧之函数的使用详解
2022/04/04 Python
Python OpenCV形态学运算示例详解
2022/04/07 Python
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python