使用jquery mobile做幻灯播放效果实现步骤


  本文标签:幻灯播放,mobile

使用jquery mobile,可以很容易实现幻灯播放效果,下面讲解下 。
1、引入相关的jqury mobile类库
复制代码 代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title> jQuery Mobile Presentation</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.css" />
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.js"></script>

2、每个需要播放幻灯片的页面基本结构
复制代码 代码如下:

<div data-role="page" id="slide1" data-theme="a" data-transition="fade">
<div data-role="header">
<h1>Slide 1</h1>
</div>
<div data-role="content">
</div>
</div>

3、接下来是每个幻灯片之间的来回导航了,代码为
复制代码 代码如下:

var changeSlide = function(toSlide){
if(toSlide.length)
$.mobile.changePage( toSlide, { transition: toSlide.jqmData(transition) } );
};
// 返回主页
var getHomeSlide = function(){
return $(:jqmData(role=page):first);
};
// go home
var goHome = function(){
changeSlide( getHomeSlide() );
return false;
};
// 到下一页
var getNextSlide = function(slide){
return slide.next(:jqmData(role=page));
};
//到下一页
var goForward = function(){
changeSlide( getNextSlide($.mobile.activePage) );
return false;
};
// 获得前一个页面
var getPrevSlide = function(slide){
return slide.prev(:jqmData(role=page));
};
// 跳到前一个页面
var goBack = function(){
changeSlide( getPrevSlide($.mobile.activePage) );
return false;
};

注意一下,使用了 $.mobile.changePage方法来实现页面的跳转,并且跳转是带有
跳转效果参数的,比如:
//transition to the "about us" page with a slideup transition
$.mobile.changePage( "about/us.html", { transition: "slideup"} );
//transition to the "search results" page, using data from a form with an id of "search"
$.mobile.changePage( "searchresults.php", {
type: "post",
data: $("form#search").serialize()
});
而return $(:jqmData(role=page):first);中,实际上jqmData是代替了
jquery的data选择器了 。
4、还有一个就是对左右箭头的就是键盘按键的处理了,比如
复制代码 代码如下:

$(document).keydown(function(e) {
if(e.keyCode ==39) goForward(); //right
else if(e.keyCode ==37) goBack(); //left
})
.bind("swiperight", goForward )
.bind("swipeleft", goBack );

5、对导航条的处理
当每个幻灯片加载时,导航条自动加载到页面的footer部分,
这个要在pagebeforecreate前加载,
复制代码 代码如下:

$(:jqmData(role=page)).live( pagebeforecreate,function(event){
var slide = $(this);
// 找到footer
var footer = $(":jqmData(role=footer)", slide );
if( !footer.length ) {
//添加到页面底部
footer = $(<div data-role="footer" data-position="fixed" data-fullscreen="true"/>).appendTo(slide);
};
// add nav. bar
footer.html(<div data-role="navbar">+
[list]+
[*]<a data-icon="back"></a>
+
[*]<a data-icon="home"></a>
+
[*]<a data-icon="forward"></a>
+
[/list]+
</div>);
// 处理前,后页的点击按钮
var backButton = $(:jqmData(icon=back), footer).click( goBack );
var homeButton = $(:jqmData(icon=home), footer).click( goHome );
var forwardButton = $(:jqmData(icon=forward), footer).click( goForward );
// 获得前,后,主页
var prevSlide = getPrevSlide( slide ), homeSlide = getHomeSlide(), nextSlide = getNextSlide( slide ) ;
// 是否存在前一页,存在的话设置可以点击的样式
if( prevSlide.length ) {
backButton.attr(href, #+ prevSlide.attr(id) );
homeButton.attr(href, #+ homeSlide.attr(id) )
}else{
//禁止其按钮
backButton.addClass(ui-disabled);
homeButton.addClass(ui-disabled)
};
// 是否存在后一页
if( nextSlide.length ) {
forwardButton.attr(href, #+ nextSlide.attr(id) )
}else{
// 禁止其按钮
forwardButton.addClass(ui-disabled)
};
//.........
});

6、根据情况加载图片
如果幻灯片很多的话,不应该全部加载图片,应该先加载小的图片,并且可以根据屏幕大小判断用什么图片,比如:
复制代码 代码如下:

<img src="empty.gif" class="photo"
data-small="..."
data-large="..."/>

判断使用方法
复制代码 代码如下:

var loadImages = function(slide) {
var width = $(window).width();
//根据屏幕大小判断使用图片大小
var attrName = width > 480? large : small;
$(img:jqmData(+attrName+), slide).each(function(){
var img = $(this);
var source = img.jqmData(attrName);
if(source) img.attr(src, source).jqmRemoveData(attrName);
});
};

整个运行效果见:
http://moretechtips.googlecode.com/svn/mobile-presentation/index.htm