jquery动画2.元素坐标动画效果(创建一个图片走廊)


Posted in Javascript onAugust 24, 2012

效果预览图片:
jquery动画2.元素坐标动画效果(创建一个图片走廊)
大家可以下载demo看完整效果,下面介绍制作过程。

1.首先创建一个html页面,html结构如下:

<div id="slider"> 
<div id="viewer"> 
<img id="image1" src="img/amstrad.jpg" alt="Amstrad CPC 472" /> 
<img id="image2" src="img/atari.jpg" alt="Atari TT030" /> 
<img id="image3" src="img/commodore16.jpg" alt="Commodore 64" /> 
<img id="image4" src="img/commodore128.jpg" alt="Commodore 128" /> 
<img id="image5" src="img/spectrum.jpg" alt="Sinclair ZX Spectrum +2" /> 
</div> 
<ul id="ui"> 
<li class="hidden" id="prev"><a href="" title="Previous">«</a></li> 
<li><a href="#image1" title="Image 1" class="active">Image 1</a></li> 
<li><a href="#image2" title="Image 2">Image 2</a></li> 
<li><a href="#image3" title="Image 3">Image 3</a></li> 
<li><a href="#image4" title="Image 4">Image 4</a></li> 
<li><a href="#image5" title="Image 5">Image 5</a></li> 
<li class="hidden" id="next"><a href="" title="Next">»</a></li> 
</ul> 
</div>

大家一看就明白,viewer包含了几张图片,ul对象里面包含了‘上一条'、‘下一条'和各个图片对应的导航。
2.接下来需要为这些html元素设置css样式,css我就不多说了,就是给viewer、图片等元素加样式,viewer同时只能显示一张图片:
#slider 
{ 
width: 500px; 
position: relative; 
} 
#viewer 
{ 
width: 400px; 
height: 300px; 
margin: auto; 
position: relative; 
overflow: hidden; 
} 
#slider ul 
{ 
width: 350px; 
margin: 0 auto; 
padding: 0; 
list-style-type: none; 
} 
#slider ul:after 
{ 
content: "."; 
visibility: hidden; 
display: block; 
height: 0; 
clear: both; 
} 
#slider li 
{ 
margin-right: 10px; 
float: left; 
} 
#prev, #next 
{ 
position: absolute; 
top: 175px; 
} 
#prev 
{ 
left: 20px; 
} 
#next 
{ 
position: absolute; 
right: 10px; 
} 
.hidden 
{ 
display: none; 
} 
#slide 
{ 
width: 2000px; 
height: 300px; 
position: absolute; 
top: 0; 
left: 0; 
} 
#slide img 
{ 
float: left; 
width: 400px; 
height: 300px; 
} 
#title 
{ 
margin: 0; 
text-align: center; 
}

3.为页面添加jquery和jquery.easing.1.3.js的引用。然后就是我们这篇的重头了,为导航编写相应的js事件。

首先我们需要创建一个新的div来包装5张图片。

$('#viewer').wrapInner('<div id="slide"></div>');

接下来我们使用jquery的selector找到slider,slide,prev,next等对象,把他们存到相应的js变量中。
var container = $('#slider'), 
prev = container.find('#prev'), 
prevChild = prev.find('a'), 
next = container.find('#next').removeClass('hidden'), 
nextChild = next.find('a'), 
slide = container.find('#slide')

创建两个新的js变量,key保存当前活动图片id,details保存所有图片各自的position和title信息。
key = "image1", 
details = { 
image1: { 
position: 0, 
title: slide.children().eq(0).attr('alt') 
}, 
image2: { 
position: -400, 
title: slide.children().eq(1).attr('alt') 
}, 
image3: { 
position: -800, 
title: slide.children().eq(2).attr('alt') 
}, 
image4: { 
position: -1200, 
title: slide.children().eq(3).attr('alt') 
}, 
image5: { 
position: -1600, 
title: slide.children().eq(4).attr('alt') 
} 
};

为了显示图片标题,我们需要添加一个h2标题到页面。
$('<h2>', { 
id: 'title', 

text: details[key].title 
}).prependTo('#slider');
 

上述工作完成后,就可以开始为a标签添加click事件了,这里的a标签分两种,一种是‘上一条'和‘下一条',另外一种是各图片对应的导航。我们需要分别为他们添加相应的click事件。但是他们都会使用到一个相同的回调函数,我们先完成回调函数的编写。代码思路我就直接以注释的方式完成。
function postAnim(dir) { 
//首先我们获取到当前活动图片的id,只包含数字部分 
var keyMath = parseInt(key.match(/\d+$/)); 

//slide的left小于0,也就是说当前活动图片不是图片1,‘上一条'导航显示;否则‘上一条'导航消失 
(parseInt(slide.css('left')) < 0) ? prev.show() : prev.hide(); 

//slide的left等于-1600,也就是说当前活动图片是第五章,‘下一条'导航消失,否则‘下一条'导航显示 
(parseInt(slide.css('left')) === -1600) ? next.hide() : next.show(); 

 

//if条件语句当使用‘上一条'和‘下一条'导航时才有意义。实现的功能就是点‘上一条'是key减一,点‘下一条'key加1 
if (dir) { 
var titleKey = (dir === 'back') ? keyMath - 1 : keyMath + 1; 
key = 'image' + titleKey; 
} 

//重新设置h2标题 
container.find('#title').text(details[key].title); 

//重新设置当前哪个图片为活动状态 
container.find('.active').removeClass('active'); 
container.find('a[href=#' + key + ']').addClass('active'); 
}

接下来我们完成‘上一条'和‘下一条'导航的功能。
nextChild.add(prevChild).click(function (e) { 
//阻止默认事件,否则动画效果就没有了 
e.preventDefault(); 
var arrow = $(this).parent(); 

//当前slide没有动画时,我们才添加新的动画效果 

if (!slide.is(':animated')) { 
slide.animate({ 
left: (arrow.attr('id') === 'prev') ? '+=400' : '-=400' 
}, 'slow', 'easeOutBack', function () { 
(arrow.attr("id") === "prev") ? postAnim("back") : postAnim("forward"); 
}); 
} 
});

最后是图片对应的各自导航的功能实现。
$('#ui li a').not(prevChild).not(nextChild).click(function (e) { 
//阻止默认事件 
e.preventDefault(); 

//获取当前活动图片id 
key = $(this).attr('href').split('#')[1]; 
//设置动画效果 

slide.animate({ 
left: details[key].position 
}, 'slow', 'easeOutBack', postAnim); 
});

本课的内容完毕了,大家可以下载demo,查看功能具体是如下实现的。

demo下载地址:jQuery.animation.position

Javascript 相关文章推荐
点击A元素触发B元素的事件在IE8下会识别成A元素
Sep 04 Javascript
JS实现FLASH幻灯片图片切换效果的方法
Mar 04 Javascript
原生js的数组除重复简单实例
May 24 Javascript
jQuery文字横向滚动效果的实现代码
May 31 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
Jun 14 Javascript
JS阻止事件冒泡行为和闭包的方法
Jun 16 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
Jan 01 Javascript
Vuejs实现购物车功能
Nov 05 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
Sep 19 Javascript
微信小程序使用wxParse解析html的方法示例
Jan 17 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
Jul 22 Javascript
解决vue-loader加载不上的问题
Oct 21 Javascript
jquery动画1.加载指示器
Aug 24 #Javascript
基于jquery的bankInput银行卡账号格式化
Aug 22 #Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
Aug 22 #Javascript
js选取多个或单个元素的实现代码(用class)
Aug 22 #Javascript
javascript动态加载三
Aug 22 #Javascript
javascript动态加载二
Aug 22 #Javascript
javascript动态加载实现方法一
Aug 22 #Javascript
You might like
PHP 输出缓存详解
2009/06/20 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
浅谈php7的重大新特性
2015/10/23 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
java script编程起步(第三课)
2007/01/10 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
vuejs指令详解
2017/02/07 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
Python函数中的函数(闭包)用法实例
2016/03/15 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
详解Python 解压缩文件
2019/04/09 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
优秀求职信范文分享
2013/12/19 职场文书
迟到检讨书400字
2014/01/13 职场文书
春节请假条
2014/04/11 职场文书
项目建议书范文
2014/05/12 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
公司回复函格式
2015/07/14 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python