nissaya.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. var _nissaya_book = 0;
  2. var _nissaya_para = 0;
  3. var _nsy_book_dir = "";
  4. var _nsy_book_id = "";
  5. $(document).ready(function () {
  6. nissaya_get(_nissaya_book, _nissaya_para);
  7. });
  8. function nissaya_get(book, para) {
  9. if (book == 0 || _nissaya_para == 0) {
  10. return;
  11. }
  12. $.get(
  13. "../nissaya/get.php",
  14. {
  15. book: book,
  16. para: para,
  17. },
  18. function (data) {
  19. let result = JSON.parse(data);
  20. if (result.error == "") {
  21. if (result.data.length > 0) {
  22. //找到的书的列表
  23. for (const iterator of result.data) {
  24. }
  25. //_nsy_book_dir = data.bookid.split("_")[0];
  26. //_nsy_book_id = result.data[0].nsyid;
  27. $("#contence").html(render_nissaya_init(result.data[0]));
  28. //insert_new_befor(1);
  29. insert_new_end(1);
  30. }
  31. }
  32. }
  33. );
  34. }
  35. function render_on_page(params) {
  36. let filename = params.dir + "/" + params.book + "_" + params.page + ".gif";
  37. let html = "";
  38. html += "<div class='img_box' dir='" + params.dir + "' book='" + params.book + "' page='" + params.page + "'>";
  39. html += "<div>" + filename + "</div>";
  40. if (params.show) {
  41. html += "<img class='book_page' src='../../tmp/nissaya/" + filename + "' />";
  42. } else {
  43. html += "<img class='book_page' data-src='../../tmp/nissaya/" + filename + "' />";
  44. }
  45. html += "</div>";
  46. return html;
  47. }
  48. function render_nissaya_init(data) {
  49. let dir = data.dir;
  50. return render_on_page({
  51. dir: dir,
  52. book: data.nsyid,
  53. page: data.nsypagenumber,
  54. show: true,
  55. });
  56. /*
  57. let filename = dir + "/" + data.nsyid + "_" + data.nsypagenumber + ".gif";
  58. let html = "";
  59. html += "<div class='img_box' dir='" + dir + "' book='" + data.nsyid + "' page='" + data.nsypagenumber + "'>";
  60. html += "<img src='../../tmp/nissaya/" + filename + "' />";
  61. html += "</div>";
  62. return html;
  63. */
  64. }
  65. function insert_new_befor(num = 2) {
  66. let head = $("#contence").children().first();
  67. let pageid = parseInt(head.attr("page"));
  68. if (pageid <= 1) {
  69. return "";
  70. }
  71. let html = render_on_page({
  72. dir: head.attr("dir"),
  73. book: head.attr("book"),
  74. page: parseInt(head.attr("page")) - 1,
  75. show: false,
  76. });
  77. $("#contence").prepend(html);
  78. }
  79. function insert_new_end(num = 2) {
  80. let last = $("#contence").children().last();
  81. let html = render_on_page({
  82. dir: last.attr("dir"),
  83. book: last.attr("book"),
  84. page: parseInt(last.attr("page")) + 1,
  85. show: false,
  86. });
  87. $("#contence").append(html);
  88. }
  89. function check_end() {
  90. let last = $(".book_page").last();
  91. let attr = last.attr("src");
  92. if (typeof attr == typeof undefined || attr == false || attr.length == 0) {
  93. return;
  94. } else {
  95. insert_new_end();
  96. }
  97. }
  98. function check_head() {
  99. let first = $(".book_page").first();
  100. let attr = first.attr("src");
  101. if (typeof attr == typeof undefined || attr == false || attr.length == 0) {
  102. return;
  103. } else {
  104. insert_new_befor();
  105. }
  106. }
  107. window.onload = function () {
  108. window.onscroll = () => {
  109. checkImgs();
  110. };
  111. function checkImgs(el) {
  112. const imgs = document.querySelectorAll(".book_page");
  113. Array.from(imgs).forEach((el) => {
  114. // 在这里更换不同的方法即可
  115. if (isInViewPort(el)) loadImg(el);
  116. });
  117. check_end();
  118. check_head();
  119. }
  120. function loadImg(el) {
  121. if (!el.src) {
  122. const source = el.dataset.src;
  123. el.src = source;
  124. }
  125. // 这里应该是有一个优化的地方,设一个标识符标识已经加载图片的index,当滚动条滚动时就不需要遍历所有的图片,只需要遍历未加载的图片即可。
  126. }
  127. function isInViewPort(el) {
  128. const viewPortHeight =
  129. window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
  130. let rect = el.parentNode.getBoundingClientRect();
  131. if (rect.top > viewPortHeight || rect.bottom < 0) {
  132. return false;
  133. } else {
  134. return true;
  135. }
  136. }
  137. };
  138. /*
  139. 作者:付出
  140. 链接:https://juejin.cn/post/6844903725249609741
  141. 来源:掘金
  142. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  143. */
  144. /*
  145. function isInViewPortOfOne(el) {
  146. // viewPortHeight 兼容所有浏览器写法
  147. const viewPortHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
  148. const offsetTop = el.offsetTop;
  149. const scrollTop = document.documentElement.scrollTop;
  150. const top = offsetTop - scrollTop;
  151. console.log("top", top);
  152. // 这里有个+100是为了提前加载+ 100
  153. return top <= viewPortHeight + 100;
  154. }
  155. */