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 相关文章推荐
javascript 面向对象编程基础:继承
Aug 21 Javascript
让图片旋转任意角度及JQuery插件使用介绍
Mar 20 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
Nov 05 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
Aug 25 Javascript
js 获取元素所有兄弟节点的实现方法
Sep 06 Javascript
jQuery实现的浮动层div浏览器居中显示效果
Feb 03 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
May 24 Javascript
JS实现的数组去除重复数据算法小结
Nov 17 Javascript
JavaScript使用math.js进行精确计算操作示例
Jun 19 Javascript
layer.open 按钮的点击事件关闭方法
Aug 17 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
May 18 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
Jun 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中的Class的几点个人看法
2006/10/09 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
php实现短信发送代码
2015/07/05 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
jquery dialog键盘事件代码
2010/08/01 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
jQuery图片缩放插件smartZoom使用实例详解
2017/08/25 jQuery
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
python3判断url链接是否为404的方法
2018/08/10 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
python 利用文件锁单例执行脚本的方法
2019/02/19 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
如何用python处理excel表格
2020/06/09 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
告诉你怎样写创业计划书
2014/01/27 职场文书
综合素质评价自我评价
2015/03/06 职场文书
幼儿园开学通知
2015/04/24 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
车间安全生产管理制度
2015/08/06 职场文书
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android
Linux中sftp常用命令整理
2022/06/28 Servers