vuikit
Version:
A Vuejs component library based on UIkit
53 lines (44 loc) • 1.97 kB
JavaScript
/**
* Vuikit 0.7.0
* (c) 2018 Miljan Aleksic
* @license MIT
*/
const win = window
const doc = document.body
const docEl = document.documentElement
export const Observer = win.MutationObserver || win.WebKitMutationObserver
export const requestAnimationFrame = win.requestAnimationFrame || (fn => setTimeout(fn, 1000 / 60))
// var hasTouchEvents = 'ontouchstart' in win
// var hasPointerEvents = win.PointerEvent
// export const hasTouch = 'ontouchstart' in win ||
// win.DocumentTouch && doc instanceof DocumentTouch ||
// navigator.msPointerEnabled && navigator.msMaxTouchPoints || // IE 10
// navigator.pointerEnabled && navigator.maxTouchPoints // IE >=11
// export const pointerDown = !hasTouch ? 'mousedown' : `mousedown ${hasTouchEvents ? 'touchstart' : 'pointerdown'}`
// export const pointerMove = !hasTouch ? 'mousemove' : `mousemove ${hasTouchEvents ? 'touchmove' : 'pointermove'}`
// export const pointerUp = !hasTouch ? 'mouseup' : `mouseup ${hasTouchEvents ? 'touchend' : 'pointerup'}`
// export const pointerEnter = hasTouch && hasPointerEvents ? 'pointerenter' : 'mouseenter'
// export const pointerLeave = hasTouch && hasPointerEvents ? 'pointerleave' : 'mouseleave'
export const transitionend = prefix('transition', 'transition-end')
export const animationstart = prefix('animation', 'animation-start')
export const animationend = prefix('animation', 'animation-end')
function prefix (name, event) {
const ucase = classify(name)
const lowered = classify(event).toLowerCase()
const classified = classify(event)
const element = doc.body || docEl
const names = {
[name]: lowered,
[`Webkit${ucase}`]: `webkit${classified}`,
[`Moz${ucase}`]: lowered,
[`o${ucase}`]: `o${classified} o${lowered}`
}
for (name in names) {
if (element.style[name] !== undefined) {
return names[name]
}
}
}
function classify (str) {
return str.replace(/(?:^|[-_/])(\w)/g, (_, c) => c ? c.toUpperCase() : '')
}