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 相关文章推荐
运用jquery实现table单双行不同显示并能单行选中
Jul 25 Javascript
jquery怎样实现ajax联动框(二)
Mar 08 Javascript
Node.js中HTTP模块与事件模块详解
Nov 14 Javascript
超级简单实现JavaScript MVC 样式框架
Mar 24 Javascript
javascript加减乘除的简单实例
Jul 12 Javascript
jquery实现拖动效果(代码分享)
Jan 25 Javascript
Vue自定义事件(详解)
Aug 19 Javascript
JavaScript 中的12种循环遍历方法【总结】
May 31 Javascript
jQuery.validate.js表单验证插件的使用代码详解
Oct 22 jQuery
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
Jun 09 Javascript
浅谈layui 绑定form submit提交表单的注意事项
Oct 25 Javascript
js实现盒子移动动画效果
Aug 09 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时间戳转换的示例
2014/03/31 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
树结构之JavaScript
2017/01/24 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
跟老齐学Python之网站的结构
2014/10/24 Python
Python全局变量操作详解
2015/04/14 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
tensorflow更改变量的值实例
2018/07/30 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
sort命令的作用和用法
2013/08/25 面试题
元宵节主持词
2014/03/25 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
护士求职自荐信
2015/03/25 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
Python基础学习之奇异的GUI对话框
2021/05/27 Python
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB
SQL基础查询和LINQ集成化查询
2022/01/18 MySQL