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 validate 中文API 附validate.js中文api手册
Jul 31 Javascript
基于jquery的loading 加载提示效果实现代码
Sep 01 Javascript
jQuery对象初始化的传参方式
Feb 26 Javascript
jQuery实现文件上传进度条特效
Aug 12 Javascript
JavaScript编程中实现对象封装特性的实例讲解
Jun 24 Javascript
获取JS中网页各种高宽与位置的方法总结
Jul 27 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
Nov 11 Javascript
Vue.js学习之过滤器详解
Jan 22 Javascript
源码分析Vue.js的监听实现教程
Apr 23 Javascript
Angular4学习之Angular CLI的安装与使用教程
Jan 04 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
Jan 25 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
Apr 26 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不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
php遍历目录方法小结
2015/03/10 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
vue.js父组件使用外部对象的方法示例
2017/04/25 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
Python实现LRU算法的2种方法
2015/06/24 Python
python实现的系统实用log类实例
2015/06/30 Python
Python中如何获取类属性的列表
2016/12/26 Python
python实现泊松图像融合
2018/07/26 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
幼儿园英语教学反思
2014/01/30 职场文书
学风建设演讲稿
2014/09/12 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
2019中小学生安全过暑期倡议书
2019/06/24 职场文书
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
win10搭建配置ftp服务器的方法
2022/08/05 Servers