Heim  >  Artikel  >  Web-Frontend  >  jquery动画2.元素坐标动画效果(创建一个图片走廊)_jquery

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

WBOY
WBOYOriginal
2016-05-16 17:50:361295Durchsuche

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

复制代码 代码如下:

大家一看就明白,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('
');  

接下来我们使用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标题到页面。
复制代码 代码如下:

$('

', {
  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'))   //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
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn