UNPKG

iv-viewer

Version:

A zooming and panning plugin inspired by google photos for your web images.

174 lines (166 loc) 5.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ZOOM_CONSTANT = exports.MOUSE_WHEEL_COUNT = void 0; exports.addClass = addClass; exports.assign = assign; exports.assignEvent = assignEvent; exports.clamp = clamp; exports.createElement = createElement; exports.css = css; exports.easeOutQuart = easeOutQuart; exports.getTouchPointsDistance = getTouchPointsDistance; exports.imageLoaded = imageLoaded; exports.noop = noop; exports.preventDefault = preventDefault; exports.remove = remove; exports.removeClass = removeClass; exports.removeCss = removeCss; exports.toArray = toArray; exports.unwrap = unwrap; exports.wrap = wrap; // constants var ZOOM_CONSTANT = exports.ZOOM_CONSTANT = 15; // increase or decrease value for zoom on mouse wheel var MOUSE_WHEEL_COUNT = exports.MOUSE_WHEEL_COUNT = 5; // A mouse delta after which it should stop preventing default behaviour of mouse wheel function noop() {} function preventDefault(e) { e.preventDefault(); } // ease out method /* t : current time, b : initial value, c : changed value, d : duration */ function easeOutQuart(t, b, c, d) { t /= d; t -= 1; return -c * (t * t * t * t - 1) + b; } function createElement(options) { var elem = document.createElement(options.tagName); if (options.id) elem.id = options.id; if (options.html) elem.innerHTML = options.html; if (options.className) elem.className = options.className; if (options.src) elem.src = options.src; if (options.style) elem.style.cssText = options.style; if (options.child) elem.appendChild(options.child); // Insert before if (options.insertBefore) { options.parent.insertBefore(elem, options.insertBefore); // Standard append } else { options.parent.appendChild(elem); } return elem; } // method to add class function addClass(el, className) { var classNameAry = className.split(' '); if (classNameAry.length > 1) { classNameAry.forEach(function (classItem) { return addClass(el, classItem); }); } else if (el.classList) { el.classList.add(className); } else { el.className += " ".concat(className); // eslint-disable-line no-param-reassign } } // method to remove class function removeClass(el, className) { var classNameAry = className.split(' '); if (classNameAry.length > 1) { classNameAry.forEach(function (classItem) { return removeClass(el, classItem); }); } else if (el.classList) { el.classList.remove(className); } else { el.className = el.className.replace(new RegExp("(^|\\b)".concat(className.split(' ').join('|'), "(\\b|$)"), 'gi'), ' '); // eslint-disable-line no-param-reassign } } // function to check if image is loaded function imageLoaded(img) { return img.complete && (typeof img.naturalWidth === 'undefined' || img.naturalWidth !== 0); } function toArray(list) { if (!(list instanceof NodeList || list instanceof HTMLCollection)) return [list]; return Array.prototype.slice.call(list); } function assign(target) { for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { rest[_key - 1] = arguments[_key]; } rest.forEach(function (obj) { Object.keys(obj).forEach(function (key) { target[key] = obj[key]; }); }); return target; } function css(elements, properties) { var elmArray = toArray(elements); if (typeof properties === 'string') { return window.getComputedStyle(elmArray[0])[properties]; } elmArray.forEach(function (element) { Object.keys(properties).forEach(function (key) { var value = properties[key]; element.style[key] = value; // eslint-disable-line no-param-reassign }); }); return undefined; } function removeCss(element, property) { element.style.removeProperty(property); } function wrap(element, _ref) { var _ref$tag = _ref.tag, tag = _ref$tag === void 0 ? 'div' : _ref$tag, className = _ref.className, id = _ref.id, style = _ref.style; var wrapper = document.createElement(tag); if (className) wrapper.className = className; if (id) wrapper.id = id; if (style) wrapper.style = style; element.parentNode.insertBefore(wrapper, element); element.parentNode.removeChild(element); wrapper.appendChild(element); return wrapper; } function unwrap(element) { var parent = element.parentNode; if (parent !== document.body) { parent.parentNode.insertBefore(element, parent); parent.parentNode.removeChild(parent); } } function remove(elements) { var elmArray = toArray(elements); elmArray.forEach(function (element) { element.parentNode.removeChild(element); }); } function clamp(num, min, max) { return Math.min(Math.max(num, min), max); } function assignEvent(element, events, handler) { if (typeof events === 'string') events = [events]; events.forEach(function (event) { element.addEventListener(event, handler); }); return function () { events.forEach(function (event) { element.removeEventListener(event, handler); }); }; } function getTouchPointsDistance(touches) { var touch0 = touches[0]; var touch1 = touches[1]; return Math.sqrt(Math.pow(touch1.pageX - touch0.pageX, 2) + Math.pow(touch1.pageY - touch0.pageY, 2)); }