使用jquery 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