jquery.nicescroll.iframehelper.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /* iframe script helper for jquery.nicescroll
  2. -- version 0.9.0
  3. -- copyright 2017-06-18 InuYaksa*2017
  4. -- licensed under the MIT
  5. --
  6. -- https://nicescroll.areaaperta.com/
  7. -- https://github.com/inuyaksa/jquery.nicescroll
  8. --
  9. */
  10. (function (document,window) {
  11. var body = document.body;
  12. var parent = window.parent;
  13. if (parent && ("createEvent" in document)) {
  14. var isoldie = ("documentMode" in document); // 11-
  15. var ismsedge = ("msCredentials" in window); // MS Edge 14+
  16. function onwheel(e) {
  17. var evt = document.createEvent("MouseEvents");
  18. evt.initEvent('wheel', true, true);
  19. evt.deltaMode = e.deltaMode;
  20. evt.deltaX = e.deltaX;
  21. evt.deltaY = e.deltaY;
  22. evt.deltaZ = e.deltaZ;
  23. evt.wheelDelta = e.wheelDelta;
  24. evt.wheelDeltaX = e.wheelDeltaX;
  25. evt.wheelDeltaY = e.wheelDeltaY;
  26. parent.dispatchEvent(evt);
  27. }
  28. body.addEventListener("wheel", onwheel);
  29. }
  30. if (window.addEventListener) {
  31. // https://davidwalsh.name/add-rules-stylesheets
  32. var sheet = (function () {
  33. var style = document.createElement("style");
  34. style.appendChild(document.createTextNode(""));
  35. document.head.appendChild(style);
  36. return style.sheet;
  37. })();
  38. var tmrscroll = false;
  39. var lastiframe = null;
  40. var lastiframeviewport = null;
  41. var lastscroll = [];
  42. window.addEventListener("scroll", function (e) {
  43. if (lastiframeviewport) {
  44. // var df = [ window.scrollX - lastscroll[0], window.scrollY - lastscroll[1] ];
  45. window.scrollTo(lastscroll[0], lastscroll[1]);
  46. // lastiframeviewport.scrollBy(df[0],df[1]);
  47. // console.log(df);
  48. }
  49. });
  50. function findNiceParent(t) {
  51. do {
  52. if ($.data(t, '__nicescroll') !== undefined) return t;
  53. t = t.parentNode || false;
  54. } while (t);
  55. return false;
  56. }
  57. window.addEventListener("load", function () {
  58. var hasstyle = false;
  59. $.nicescroll.each(function () {
  60. var nice = this;
  61. nice.scrollstart(function () {
  62. if (!hasstyle) sheet.insertRule("iframe { pointer-events: none !important; }", 0);
  63. hasstyle = true;
  64. });
  65. nice.scrollend(function () {
  66. if (hasstyle) sheet.deleteRule(0);
  67. hasstyle = false;
  68. });
  69. });
  70. $("iframe").each(function () {
  71. this.addEventListener("mouseenter", function (e) {
  72. lastiframe = e.target;
  73. var chk = findNiceParent(lastiframe);
  74. lastiframeviewport = chk;
  75. //if (chk) lastiframeviewport = $(chk).getNiceScroll();
  76. lastscroll = [window.scrollX, window.scrollY];
  77. });
  78. this.addEventListener("mouseleave", function (e) {
  79. lastiframe = lastiframeviewport = null;
  80. });
  81. });
  82. });
  83. }
  84. })(document,window);