ppt.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. /**
  2. * Copyright 2013 I Doc View
  3. * @author Godwin <I Doc View>
  4. */
  5. var ratio = 0.75;
  6. var pages;
  7. var slideUrls = new Array();
  8. var slideThumbUrls = new Array();
  9. var curSlide = 1;
  10. var totalSize = 1; // PPT当前获取到的总页数
  11. var slideCount = 1; // PPT文件总页数
  12. $(document).ready(function () {
  13. var data = resultData
  14. var code = data.code;
  15. if (1 == code) {
  16. uuid = data.uuid;
  17. pages = data.data;
  18. totalSize = pages.length;
  19. slideCount = data.totalSize;
  20. // title
  21. $('.container-fluid:first .btn:first').after('<a class="brand lnk-file-title" style="text-decoration: none;">' + data.name + '</a>');
  22. document.title = data.name;
  23. // set ratio
  24. ratio = pages[0].ratio;
  25. // reset all content
  26. resetContent();
  27. afterLoad();
  28. } else {
  29. $('.container-fluid .row-fluid').html('<section><div class="alert alert-error">' + data.desc + '</div></section>');
  30. }
  31. clearProgress();
  32. // 是否显示全屏按钮
  33. $('.fullscreen-link').toggle(screenfull.enabled);
  34. // 全屏事件
  35. $('.fullscreen-link').click(function () {
  36. if (screenfull.enabled) {
  37. screenfull.toggle($('.slide-img-container')[0]);
  38. }
  39. });
  40. $(document).bind("fullscreenchange", function () {
  41. if (screenfull.isFullscreen) {
  42. $('.slide-img-container').css('background-color', 'black');
  43. $('.slide-img-container').contextMenu(true);
  44. } else {
  45. $('.slide-img-container').css('background-color', '');
  46. $('.slide-img-container').contextMenu(false);
  47. }
  48. });
  49. $('.select-page-selector').change(function () {
  50. var selectNum = $(".select-page-selector option:selected").text();
  51. gotoSlide(selectNum);
  52. });
  53. $('.slide-img-container .ppt-turn-left-mask').click(function () {
  54. preSlide();
  55. });
  56. $('.slide-img-container .ppt-turn-right-mask').click(function () {
  57. nextSlide();
  58. });
  59. // Right click (NOT supported in SOUGOU browser)
  60. /*
  61. $.contextMenu({
  62. selector: '.slide-img-container',
  63. items: {
  64. "next": {
  65. name: "下一张",
  66. callback: function(key, options) {
  67. nextSlide();
  68. }
  69. },
  70. "previous": {
  71. name: "上一张",
  72. callback: function(key, options) {
  73. preSlide();
  74. }
  75. },
  76. "sep1": "---------",
  77. "exit": {
  78. name: "结束放映",
  79. callback: function(key, options) {
  80. $('.slide-img-container').fullScreen(false);
  81. }
  82. },
  83. }
  84. });
  85. */
  86. $('.slide-img-container').contextMenu(false);
  87. // Swipe method is NOT supported in IE6, so it should be the last one.
  88. try {
  89. $('.slide-img-container').swipeleft(function () {
  90. nextSlide();
  91. });
  92. $('.slide-img-container').swiperight(function () {
  93. preSlide();
  94. });
  95. } catch (err) {
  96. }
  97. });
  98. var remainContentInterval;
  99. function checkRemainContent() {
  100. clearInterval(remainContentInterval);
  101. if (slideCount == totalSize) {
  102. return;
  103. }
  104. }
  105. function resetContent() {
  106. remainContentInterval = setInterval(checkRemainContent, 8000);
  107. // clear all content
  108. $('.row-fluid .span2').empty();
  109. $('.select-page-selector').empty();
  110. $('.select-page-selector-sync').empty();
  111. $('.slide-img-container img').remove();
  112. // 限制预览页数开始
  113. var viewCheck = authMap.view;
  114. if (!!viewCheck && (viewCheck > 1) && (pages.length > viewCheck)) {
  115. $('.navbar').after('<div class="alert alert-info" style="text-align: center; color: red;">试读结束,支付后阅读全文!</div>');
  116. totalSize = viewCheck;
  117. clearInterval(remainContentInterval);
  118. }
  119. // 限制预览页数结束
  120. // pages
  121. for (i = 0; i < totalSize; i++) {
  122. var page = pages[i];
  123. slideUrls[i] = page.url;
  124. slideThumbUrls[i] = page.thumbUrl;
  125. $('.row-fluid .span2').append('<div class="thumbnail" page="' + (i + 1) + '"><img src="' + page.thumbUrl + '"></div><div class="thumb-page-number-container">' + (i + 1) + '/' + slideCount + '</div>');
  126. $('.select-page-selector').append('<option>' + (i + 1) + '</option>');
  127. $('.select-page-selector-sync').append('<option>' + (i + 1) + '</option>');
  128. }
  129. // 未转换完成提示信息
  130. if (totalSize < slideCount) {
  131. $('.row-fluid .span2').prepend('<div style="color: red;">转换中(' + Math.floor((totalSize / slideCount) * 100) + '%),请稍候……</div>');
  132. }
  133. $('.slide-img-container').append('<img src="' + slideUrls[curSlide - 1] + '" class="img-polaroid" style="height: 100%;">');
  134. var thumbnailWidth = $('.thumbnail:first').width();
  135. var thumbnailHeight = thumbnailWidth * ratio;
  136. $('.thumbnail').height(thumbnailHeight);
  137. $('.thumbnail>img').width(thumbnailWidth).height(thumbnailHeight);
  138. var slideImgContainerWidth = $('.slide-img-container:first').width();
  139. var slideImgContainerHeight = slideImgContainerWidth * ratio;
  140. $('.slide-img-container').height(slideImgContainerHeight);
  141. resetImgSize();
  142. var percent = Math.ceil((curSlide / slideUrls.length) * 100);
  143. $('.thumbnail[page="' + curSlide + '"]').addClass('ppt-thumb-border');
  144. // $('.thumbnail[page="' + curSlide + '"]').animate({scrollTop:($(window).height()/2)}, 'slow');
  145. $('.select-page-selector').val(curSlide);
  146. $('.bottom-paging-progress .bar').width('' + percent + '%');
  147. $('.thumbnail').click(function () {
  148. var page_num = $(this).attr('page');
  149. gotoSlide(page_num);
  150. });
  151. }
  152. $(window).resize(function () {
  153. resetImgSize();
  154. });
  155. function resetImgSize() {
  156. var leftW = $('.row-fluid .span2').width() + 40;
  157. var windowW = $(window).width();
  158. if (windowW < 768) {
  159. leftW = -40;
  160. $('.hidden-phone').css('display', 'none');
  161. $('.span9').removeClass('offset2');
  162. } else {
  163. $('.hidden-phone').css('display', 'block');
  164. $('.span9').addClass('offset2');
  165. }
  166. var ww = $(window).width() - 120 - leftW;
  167. var wh = $(window).height() - 90;
  168. if (screenfull.isFullscreen) {
  169. ww = ww + 90 + leftW;
  170. wh = wh + 80;
  171. }
  172. if (wh / ww < ratio) {
  173. $('.slide-img-container').height(wh);
  174. $('.slide-img-container').width(wh / ratio);
  175. } else {
  176. $('.slide-img-container').width(ww);
  177. $('.slide-img-container').height(ww * ratio);
  178. }
  179. }
  180. $(document).keydown(function (event) {
  181. if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 33) { // 37 left, 38 up, 33 pageUp
  182. preSlide();
  183. } else if (event.keyCode == 39 || event.keyCode == 40 || event.keyCode == 32 || event.keyCode == 34) { // 39 right, 40 down, 32 space, 34 pageDown
  184. nextSlide();
  185. } else if (event.keyCode == 13) {
  186. screenfull.toggle($('.slide-img-container')[0]);
  187. }
  188. });
  189. function getCurSlide() {
  190. return curSlide;
  191. }
  192. function preSlide() {
  193. var preSlide = eval(Number(getCurSlide()) - 1);
  194. gotoSlide(preSlide);
  195. }
  196. function nextSlide() {
  197. var nextSlide = eval(Number(getCurSlide()) + 1);
  198. gotoSlide(nextSlide);
  199. }
  200. function gotoSlide(slide) {
  201. var slideSum = slideUrls.length;
  202. if (slide <= 0) {
  203. slide = 1;
  204. } else if (slideSum < slide) {
  205. slide = slideSum;
  206. }
  207. curSlide = slide;
  208. /*
  209. $(".slide-img-container img").fadeOut(function() {
  210. $(this).attr("src", slideUrls[slide - 1]).fadeIn();
  211. });
  212. */
  213. $(".slide-img-container img").attr("src", slideUrls[slide - 1]);
  214. var percent = Math.ceil((curSlide / slideUrls.length) * 100);
  215. $('.thumbnail').removeClass('ppt-thumb-border');
  216. $('.thumbnail[page="' + slide + '"]').addClass('ppt-thumb-border');
  217. var thumbTop = slide * ($('.thumbnail[page="' + 1 + '"]').height() + 10 + $('.thumb-page-number-container').height()) - ($(document).height() / 2);
  218. $('.span2 ').animate({scrollTop: (thumbTop)}, 'slow');
  219. $('.select-page-selector').val(slide);
  220. $('.select-page-selector-sync').val(slide);
  221. $('.bottom-paging-progress .bar').width('' + percent + '%');
  222. }