1/** 2 * Object.assign() polyfill 3 */ 4Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(a,b){"use strict";if(void 0===a||null===a)error("Cannot convert first argument to object");for(var c=Object(a),d=1;d<arguments.length;d++){var e=arguments[d];if(void 0!==e&&null!==e)for(var f=Object.keys(Object(e)),g=0,h=f.length;g<h;g++){var i=f[g],j=Object.getOwnPropertyDescriptor(e,i);void 0!==j&&j.enumerable&&(c[i]=e[i])}}return c}}); 5 6/** 7 * CustomEvent() polyfill 8 */ 9!function(){if("function"==typeof window.CustomEvent)return;function t(t,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent("CustomEvent");return n.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),n}t.prototype=window.Event.prototype,window.CustomEvent=t}(); 10 11 12/** 13 * ФÑнкÑÐ¸Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑобÑÑÐ¸Ñ swipe на ÑлеменÑе. 14 * @param {Object} el - ÑÐ»ÐµÐ¼ÐµÐ½Ñ DOM. 15 * @param {Object} settings - обÑÐµÐºÑ Ñ Ð¿ÑедваÑиÑелÑнÑми наÑÑÑойками. 16 */ 17var swipe = function(el, settings) { 18 // наÑÑÑойки по ÑмолÑÐ°Ð½Ð¸Ñ 19 var settings = Object.assign({}, { 20 minDist: 60, // минималÑÐ½Ð°Ñ Ð´Ð¸ÑÑанÑиÑ, коÑоÑÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ пÑойÑи ÑказаÑелÑ, ÑÑÐ¾Ð±Ñ Ð¶ÐµÑÑ ÑÑиÑалÑÑ ÐºÐ°Ðº Ñвайп (px) 21 maxDist: 120, // макÑималÑÐ½Ð°Ñ Ð´Ð¸ÑÑанÑиÑ, не пÑевÑÑÐ°Ñ ÐºÐ¾ÑоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑойÑи ÑказаÑелÑ, ÑÑÐ¾Ð±Ñ Ð¶ÐµÑÑ ÑÑиÑалÑÑ ÐºÐ°Ðº Ñвайп (px) 22 maxTime: 700, // макÑималÑное вÑемÑ, за коÑоÑое должен бÑÑÑ ÑовеÑÑен Ñвайп (ms) 23 minTime: 50 // минималÑное вÑемÑ, за коÑоÑое должен бÑÑÑ ÑовеÑÑен Ñвайп (ms) 24 }, settings); 25 26 // коÑÑекÑÐ¸Ñ Ð²Ñемени пÑи оÑибоÑнÑÑ Ð·Ð½Ð°ÑениÑÑ 27 if (settings.maxTime < settings.minTime) settings.maxTime = settings.minTime + 500; 28 if (settings.maxTime < 100 || settings.minTime < 50) { 29 settings.maxTime = 700; 30 settings.minTime = 30; 31 } 32 33 var dir, // напÑавление Ñвайпа (horizontal, vertical) 34 swipeType, // Ñип Ñвайпа (up, down, left, right) 35 dist, // диÑÑанÑиÑ, пÑÐ¾Ð¹Ð´ÐµÐ½Ð½Ð°Ñ ÑказаÑелем 36 isMouse = false, // поддеÑжка мÑÑи (не иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑаÑ-ÑобÑÑий) 37 isMouseDown = false, // Ñказание на акÑивное нажаÑие мÑÑи (не иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑаÑ-ÑобÑÑий) 38 startX = 0, // наÑало кооÑÐ´Ð¸Ð½Ð°Ñ Ð¿Ð¾ оÑи X (pageX) 39 distX = 0, // диÑÑанÑиÑ, пÑÐ¾Ð¹Ð´ÐµÐ½Ð½Ð°Ñ ÑказаÑелем по оÑи X 40 startY = 0, // наÑало кооÑÐ´Ð¸Ð½Ð°Ñ Ð¿Ð¾ оÑи Y (pageY) 41 distY = 0, // диÑÑанÑиÑ, пÑÐ¾Ð¹Ð´ÐµÐ½Ð½Ð°Ñ ÑказаÑелем по оÑи Y 42 startTime = 0, // вÑÐµÐ¼Ñ Ð½Ð°Ñала каÑÐ°Ð½Ð¸Ñ 43 support = { // поддеÑживаемÑе бÑаÑзеÑом ÑÐ¸Ð¿Ñ ÑобÑÑий 44 pointer: !!("PointerEvent" in window || ("msPointerEnabled" in window.navigator)), 45 touch: !!(typeof window.orientation !== "undefined" || /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || "ontouchstart" in window || navigator.msMaxTouchPoints || "maxTouchPoints" in window.navigator > 1 || "msMaxTouchPoints" in window.navigator > 1) 46 }; 47 48 /** 49 * ÐпÑедление доÑÑÑпнÑÑ Ð² бÑаÑзеÑе ÑобÑÑий: pointer, touch и mouse. 50 * @returns {Object} - возвÑаÑÐ°ÐµÑ Ð¾Ð±ÑÐµÐºÑ Ñ Ð´Ð¾ÑÑÑпнÑми ÑобÑÑиÑми. 51 */ 52 var getSupportedEvents = function() { 53 switch (true) { 54 case support.pointer: 55 events = { 56 type: "pointer", 57 start: "PointerDown", 58 move: "PointerMove", 59 end: "PointerUp", 60 cancel: "PointerCancel", 61 leave: "PointerLeave" 62 }; 63 // добавление пÑеÑикÑов Ð´Ð»Ñ IE10 64 var ie10 = (window.navigator.msPointerEnabled && Function('/*@cc_on return document.documentMode===10@*/')()); 65 for (var value in events) { 66 if (value === "type") continue; 67 events[value] = (ie10) ? "MS" + events[value] : events[value].toLowerCase(); 68 } 69 break; 70 case support.touch: 71 events = { 72 type: "touch", 73 start: "touchstart", 74 move: "touchmove", 75 end: "touchend", 76 cancel: "touchcancel" 77 }; 78 break; 79 default: 80 events = { 81 type: "mouse", 82 start: "mousedown", 83 move: "mousemove", 84 end: "mouseup", 85 leave: "mouseleave" 86 }; 87 break; 88 } 89 return events; 90 }; 91 92 93 /** 94 * ÐбÑединение ÑобÑÑий mouse/pointer и touch. 95 * @param e {Event} - пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² каÑеÑÑве аÑгÑменÑа ÑобÑÑие. 96 * @returns {TouchList|Event} - возвÑаÑÐ°ÐµÑ Ð»Ð¸Ð±Ð¾ TouchList, либо оÑÑавлÑÐµÑ ÑобÑÑие без изменениÑ. 97 */ 98 var eventsUnify = function(e) { 99 return e.changedTouches ? e.changedTouches[0] : e; 100 }; 101 102 103 /** 104 * ÐбÑабоÑик наÑала каÑÐ°Ð½Ð¸Ñ ÑказаÑелем. 105 * @param e {Event} - полÑÑÐ°ÐµÑ ÑобÑÑие. 106 */ 107 var checkStart = function(e) { 108 var event = eventsUnify(e); 109 if (support.touch && typeof e.touches !== "undefined" && e.touches.length !== 1) return; // игноÑиÑование каÑÐ°Ð½Ð¸Ñ Ð½ÐµÑколÑкими палÑÑами 110 dir = "none"; 111 swipeType = "none"; 112 dist = 0; 113 startX = event.pageX; 114 startY = event.pageY; 115 startTime = new Date().getTime(); 116 if (isMouse) isMouseDown = true; // поддеÑжка мÑÑи 117 }; 118 119 /** 120 * ÐбÑабоÑÑик Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑказаÑелÑ. 121 * @param e {Event} - полÑÑÐ°ÐµÑ ÑобÑÑие. 122 */ 123 var checkMove = function(e) { 124 if (isMouse && !isMouseDown) return; // вÑÑ Ð¾Ð´ из ÑÑнкÑии, еÑли мÑÑÑ Ð¿ÐµÑеÑÑала бÑÑÑ Ð°ÐºÑивна во вÑÐµÐ¼Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ 125 var event = eventsUnify(e); 126 distX = event.pageX - startX; 127 distY = event.pageY - startY; 128 if (Math.abs(distX) > Math.abs(distY)) dir = (distX < 0) ? "left" : "right"; 129 else dir = (distY < 0) ? "up" : "down"; 130 }; 131 132 /** 133 * ÐбÑабоÑÑик оконÑÐ°Ð½Ð¸Ñ ÐºÐ°ÑÐ°Ð½Ð¸Ñ ÑказаÑелем. 134 * @param e {Event} - полÑÑÐ°ÐµÑ ÑобÑÑие. 135 */ 136 var checkEnd = function(e) { 137 if (isMouse && !isMouseDown) { // вÑÑ Ð¾Ð´ из ÑÑнкÑии и ÑбÑÐ¾Ñ Ð¿ÑовеÑки нажаÑÐ¸Ñ Ð¼ÑÑи 138 isMouseDown = false;
139 return; 140 } 141 var endTime = new Date().getTime(); 142 var time = endTime - startTime; 143 if (time >= settings.minTime && time <= settings.maxTime) { // пÑовеÑка вÑемени жеÑÑа 144 if (Math.abs(distX) >= settings.minDist && Math.abs(distY) <= settings.maxDist) { 145 swipeType = dir; // опÑедление Ñипа Ñвайпа как "left" или "right" 146 } else if (Math.abs(distY) >= settings.minDist && Math.abs(distX) <= settings.maxDist) { 147 swipeType = dir; // опÑедление Ñипа Ñвайпа как "top" или "down" 148 } 149 } 150 dist = (dir === "left" || dir === "right") ? Math.abs(distX) : Math.abs(distY); // опÑедление пÑойденной ÑказаÑелем диÑÑанÑии 151 152 // генеÑаÑÐ¸Ñ ÐºÐ°ÑÑомного ÑобÑÑÐ¸Ñ swipe 153 if (swipeType !== "none" && dist >= settings.minDist) { 154 var swipeEvent = new CustomEvent("swipe", { 155 bubbles: true, 156 cancelable: true, 157 detail: { 158 full: e, // полное ÑобÑÑие Event 159 dir: swipeType, // напÑавление Ñвайпа 160 dist: dist, // диÑÑанÑÐ¸Ñ Ñвайпа 161 time: time // вÑемÑ, поÑÑаÑенное на Ñвайп 162 } 163 }); 164 el.dispatchEvent(swipeEvent); 165 } 166 }; 167 168 // добавление поддеÑживаемÑÑ ÑобÑÑий 169 var events = getSupportedEvents(); 170 171 // пÑовеÑка налиÑÐ¸Ñ Ð¼ÑÑи 172 if ((support.pointer && !support.touch) || events.type === "mouse") isMouse = true; 173 174 // добавление обÑабоÑÑиков на ÑÐ»ÐµÐ¼ÐµÐ½Ñ 175 el.addEventListener(events.start, checkStart); 176 el.addEventListener(events.move, checkMove); 177 el.addEventListener(events.end, checkEnd); 178 if(support.pointer && support.touch) { 179 el.addEventListener('lostpointercapture', checkEnd); 180 } 181};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.