UNPKG

@eyeear/mswipe

Version:

轮播、焦点图、跑马灯

118 lines (102 loc) 3.58 kB
const utils = (() => { let query = (selector) => { return typeof selector === 'string' ? document.querySelector(selector) : selector } let on = (el, type, fn) => { if (typeof type === 'string') { let capture = type.indexOf('touch') ? { passive: false, // 解决谷歌浏览器版本(>=56) preventDefault() 失效问题 capture: false } : false return el.addEventListener(type, fn, capture) } for (let i = 0; i < type.length; i++) el.addEventListener(type[i], fn, false) } let off = (el, type, fn) => { if (typeof type === 'string') return el.removeEventListener(type, fn, false) for (let i = 0; i < type.length; i++) el.removeEventListener(type[i], fn, false) } let css = (el, prop) => { return window.getComputedStyle(el, null)[prop] } let width = (el) => { let bl = parseFloat(css(el, 'borderLeftWidth')) let pl = parseFloat(css(el, 'paddingLeft')) let w = parseFloat(css(el, 'width')) let pr = parseFloat(css(el, 'paddingRight')) let br = parseFloat(css(el, 'borderRightWidth')) return bl + pl + w + pr + br } let outterWidth = (el) => { let ml = parseFloat(css(el, 'marginLeft')) let w = width(el) let mr = parseFloat(css(el, 'marginRight')) return ml + w + mr // return parseFloat(css(el, 'marginLeft')) + el.offsetWidth + parseFloat(css(el, 'marginRight')) } let height = (el) => { let bt = parseFloat(css(el, 'borderTopWidth')) let pt = parseFloat(css(el, 'paddingTop')) let h = parseFloat(css(el, 'height')) let pb = parseFloat(css(el, 'paddingBottom')) let bb = parseFloat(css(el, 'borderBottomWidth')) return bt + pt + h + pb + bb } let outterHeight = (el) => { let mt = parseFloat(css(el, 'marginTop')) let h = height(el) let mb = parseFloat(css(el, 'marginBottom')) return mt + h + mb // return parseFloat(css(el, 'marginTop')) + el.offsetHeight + parseFloat(css(el, 'marginBottom')) } let getDirection = (x, y) => { if (x > y && x > 5) { return 'horizontal' } if (y > x && y > 5) { return 'vertical' } return '' } let range = (num, min, max) => { return Math.min(Math.max(num, min), max) } let prefix = (prop) => { const style = document.createElement('div').style if (prop in style) return prop return ('webkit-' + prop).replace(/-\D/g, match => match.charAt(1).toUpperCase()) } let _watch = (target, prop, callback) => { Object.defineProperty(target, prop, { get() { return this['__' + prop] }, set(value) { if (value !== this['__' + prop]) { this['__' + prop] = value callback() } } }) } let observe = (target, props, callback) => { for (let i = 0; i < props.length; i++) { _watch(target, props[i], callback) } } return { on, off, css, query, range, prefix, observe, width, height, outterWidth, outterHeight, getDirection } })() export default utils