ppt.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  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. var size = (!!$.url().param('size') ? $.url().param('size') : 0);
  13. $(document).ready(function() {
  14. // async method:
  15. $.get('onlinePreview?' , params, function(data, status) {
  16. var data = JSON.parse(data);
  17. var code = data.code;
  18. if (1 == code) {
  19. uuid = data.uuid;
  20. pages = data.data;
  21. totalSize = pages.length;
  22. slideCount = data.totalSize;
  23. // title
  24. $('.container-fluid:first .btn:first').after('<a class="brand lnk-file-title" style="text-decoration: none;" href="' + contextPath + '/doc/download/' + uuid + (!!queryStr ? '?' + queryStr : '') + '" title="' + data.name + '">' + data.name + '</a>');
  25. document.title = data.name;
  26. // set ratio
  27. ratio = pages[0].ratio;
  28. // reset all content
  29. resetContent();
  30. afterLoad();
  31. } else {
  32. $('.container-fluid .row-fluid').html('<section><div class="alert alert-error">' + data.desc + '</div></section>');
  33. }
  34. clearProgress();
  35. });
  36. // 是否显示全屏按钮
  37. $('.fullscreen-link').toggle(screenfull.enabled);
  38. // 全屏事件
  39. $('.fullscreen-link').click(function(){
  40. if (screenfull.enabled) {
  41. screenfull.toggle($('.slide-img-container')[0]);
  42. }
  43. });
  44. $(document).bind("fullscreenchange", function() {
  45. if (screenfull.isFullscreen) {
  46. $('.slide-img-container').css('background-color', 'black');
  47. $('.slide-img-container').contextMenu(true);
  48. } else {
  49. $('.slide-img-container').css('background-color', '');
  50. $('.slide-img-container').contextMenu(false);
  51. }
  52. });
  53. $('.select-page-selector').change(function() {
  54. var selectNum = $(".select-page-selector option:selected").text();
  55. gotoSlide(selectNum);
  56. });
  57. $('.slide-img-container .ppt-turn-left-mask').click(function () {
  58. preSlide();
  59. });
  60. $('.slide-img-container .ppt-turn-right-mask').click(function () {
  61. nextSlide();
  62. });
  63. // Right click (NOT supported in SOUGOU browser)
  64. /*
  65. $.contextMenu({
  66. selector: '.slide-img-container',
  67. items: {
  68. "next": {
  69. name: "下一张",
  70. callback: function(key, options) {
  71. nextSlide();
  72. }
  73. },
  74. "previous": {
  75. name: "上一张",
  76. callback: function(key, options) {
  77. preSlide();
  78. }
  79. },
  80. "sep1": "---------",
  81. "exit": {
  82. name: "结束放映",
  83. callback: function(key, options) {
  84. $('.slide-img-container').fullScreen(false);
  85. }
  86. },
  87. }
  88. });
  89. */
  90. $('.slide-img-container').contextMenu(false);
  91. // Swipe method is NOT supported in IE6, so it should be the last one.
  92. try {
  93. $('.slide-img-container').swipeleft(function() { nextSlide(); });
  94. $('.slide-img-container').swiperight(function() { preSlide(); });
  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. }