nissaya.js 3.8 KB

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