keyboard.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*=========================
  2. Keyboard Control
  3. ===========================*/
  4. function handleKeyboard(e) {
  5. if (e.originalEvent) e = e.originalEvent; //jquery fix
  6. var kc = e.keyCode || e.charCode;
  7. // Directions locks
  8. if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {
  9. return false;
  10. }
  11. if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {
  12. return false;
  13. }
  14. if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
  15. return;
  16. }
  17. if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {
  18. return;
  19. }
  20. if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {
  21. var inView = false;
  22. //Check that swiper should be inside of visible area of window
  23. if (s.container.parents('.' + s.params.slideClass).length > 0 && s.container.parents('.' + s.params.slideActiveClass).length === 0) {
  24. return;
  25. }
  26. var windowScroll = {
  27. left: window.pageXOffset,
  28. top: window.pageYOffset
  29. };
  30. var windowWidth = window.innerWidth;
  31. var windowHeight = window.innerHeight;
  32. var swiperOffset = s.container.offset();
  33. if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;
  34. var swiperCoord = [
  35. [swiperOffset.left, swiperOffset.top],
  36. [swiperOffset.left + s.width, swiperOffset.top],
  37. [swiperOffset.left, swiperOffset.top + s.height],
  38. [swiperOffset.left + s.width, swiperOffset.top + s.height]
  39. ];
  40. for (var i = 0; i < swiperCoord.length; i++) {
  41. var point = swiperCoord[i];
  42. if (
  43. point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&
  44. point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight
  45. ) {
  46. inView = true;
  47. }
  48. }
  49. if (!inView) return;
  50. }
  51. if (s.isHorizontal()) {
  52. if (kc === 37 || kc === 39) {
  53. if (e.preventDefault) e.preventDefault();
  54. else e.returnValue = false;
  55. }
  56. if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();
  57. if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();
  58. }
  59. else {
  60. if (kc === 38 || kc === 40) {
  61. if (e.preventDefault) e.preventDefault();
  62. else e.returnValue = false;
  63. }
  64. if (kc === 40) s.slideNext();
  65. if (kc === 38) s.slidePrev();
  66. }
  67. s.emit('onKeyPress', s, kc);
  68. }
  69. s.disableKeyboardControl = function () {
  70. s.params.keyboardControl = false;
  71. $(document).off('keydown', handleKeyboard);
  72. };
  73. s.enableKeyboardControl = function () {
  74. s.params.keyboardControl = true;
  75. $(document).on('keydown', handleKeyboard);
  76. };