Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.32 KB | None | 0 0
  1. <style>
  2. .yandex-map {
  3. width: 100%;
  4. }
  5. .yandex-map__container {
  6. position: relative;
  7. width: 100%;
  8. height: 500px;
  9. }
  10. .yandex-map__overlay {
  11. z-index: 5000;
  12. position: absolute;
  13. top: 0;
  14. left: 0;
  15. height: 500px;
  16. width: 100%;
  17. opacity: 0;
  18. display: table;
  19. background-color: rgba(0,0,0,0.45);
  20. transition-duration: 0.1s;
  21. transition: opacity ease-in-out;
  22. }
  23. .yandex-map__overlay__message {
  24. display: table-cell;
  25. vertical-align: middle;
  26. text-align: center;
  27. font-weight: bold;
  28. color: #fff;
  29. font-size: 22px;
  30. }
  31. </style>
  32. <div class="yandex-map">
  33. <div id="yandex-map" class="yandex-map__container">
  34. <div class="yandex-map__overlay">
  35. <div class="yandex-map__overlay__message">Чтобы переместить карту, проведите по ней двумя пальцами</div>
  36. </div>
  37. <script type="text/javascript" charset="utf-8" async src="https://api-maps.yandex.ru/services/constructor/1.0/js/?um=constructor%3Af3ecffa7b452ca5db57642a13d7bd0e0f4fc51ec04ec587687b9886fd7964eac&amp;width=100%25&amp;height=500&amp;lang=ru_RU&amp;scroll=false"></script>
  38. </div>
  39. </div>
  40. <script>
  41. (function ($) {
  42. $(document).ready(function() {
  43. function toggleMapOverlayVisibility(status) {
  44. status && toggleMapOverlay(status);
  45. $('.yandex-map__overlay').css({
  46. 'opacity' : status ? 1 : 0,
  47. });
  48. }
  49.  
  50. function toggleMapOverlay(status) {
  51. $('.yandex-map__overlay').toggle(status);
  52. }
  53.  
  54. function isOverlayEvent(event) {
  55. return $(event.target).hasClass('yandex-map__overlay__message');
  56. }
  57.  
  58. function getOverlayEventTarget(event) {
  59. var target = false;
  60. toggleMapOverlay(false);
  61. if (event.touches && event.touches[0]) {
  62. target = document.elementFromPoint(event.touches[0].clientX, event.touches[0].clientY);
  63. }
  64. toggleMapOverlay(true);
  65. return target;
  66. }
  67.  
  68. function cloneEventObj(eventObj, overrideObj) {
  69. if (!overrideObj) {
  70. overrideObj = {};
  71. }
  72. function EventCloneFactory(overProps) {
  73. for (var x in overProps) {
  74. this[x] = overProps[x];
  75. }
  76. }
  77. EventCloneFactory.prototype = eventObj;
  78. return new EventCloneFactory(overrideObj);
  79. }
  80.  
  81. function cloneEvent(event, target) {
  82. var clone = new event.constructor(event.type, event);
  83. clone.target = target;
  84. return clone;
  85. }
  86.  
  87. var lastTarget = null;
  88.  
  89. window.addEventListener("touchstart", function(event) {
  90. if (isOverlayEvent(event)) {
  91. var target = lastTarget = getOverlayEventTarget(event);
  92. if (target) {
  93. target.dispatchEvent(cloneEvent(event, target));
  94. } else {
  95. toggleMapOverlayVisibility(false);
  96. }
  97. }
  98. }, true);
  99.  
  100. window.addEventListener("touchmove", function(event) {
  101. if (isOverlayEvent(event)) {
  102. if (lastTarget) {
  103. if ($(lastTarget).is('ymaps[class*="-events-pane"]')) {
  104. if (event.touches && event.touches.length == 1) {
  105. toggleMapOverlayVisibility(true);
  106. lastTarget.dispatchEvent(new TouchEvent('touchcancel'));
  107. return;
  108. } else {
  109. toggleMapOverlayVisibility(false);
  110. }
  111. }
  112.  
  113. var clone = cloneEvent(event, lastTarget);
  114. event.stopPropagation();
  115. event.returnValue = false;
  116. lastTarget.dispatchEvent(clone);
  117. }
  118. }
  119. }, true);
  120.  
  121. ["touchend", "touchcancel"].forEach(function(e) {
  122. window.addEventListener(e, function(event) {
  123. if (isOverlayEvent(event)) {
  124. if (lastTarget) {
  125. lastTarget.dispatchEvent(cloneEvent(event, lastTarget));
  126. lastTarget = null;
  127. }
  128. toggleMapOverlayVisibility(false);
  129. }
  130. }, true);
  131. });
  132.  
  133. if (!('ontouchstart' in window || navigator.msMaxTouchPoints)) {
  134. toggleMapOverlay(false);
  135. }
  136. });
  137. })(jQuery);
  138. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement