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之querySelector和querySelectorAll使用介绍
Dec 20 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
Feb 24 Javascript
javascript实现倒计时并弹窗提示特效
Jun 05 Javascript
Backbone.js的Hello World程序实例
Jun 19 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
Sep 27 Javascript
AngularJS ng-template寄宿方式用法分析
Nov 07 Javascript
js闭包用法实例详解
Dec 13 Javascript
详解vue+vueRouter+webpack的简单实例
Jun 17 Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
Jul 09 Javascript
JQuery的加载和选择器用法简单示例
May 13 jQuery
thinkjs微信中控之微信鉴权登陆的实现代码
Aug 08 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写入数据库乱码的问题
2019/09/17 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
Javascript模块模式分析
2008/05/16 Javascript
extjs fckeditor集成代码
2009/05/10 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
详解JS函数防抖
2020/06/05 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
python选择排序算法的实现代码
2013/11/21 Python
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Python面向对象特殊成员
2017/04/24 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
Django app配置多个数据库代码实例
2019/12/17 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
如何通过python实现全排列
2020/02/11 Python
美国第一香水网站:Perfume.com
2017/01/23 全球购物
自立自强的名人事例
2014/02/10 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
银行贷款承诺书
2014/03/29 职场文书
房屋转让协议书
2014/10/18 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript