UNPKG

@zebra-ui/color

Version:

两种风格可选择,对微信小程序和支付宝小程序做了单独处理,滑动更丝滑。

128 lines (118 loc) 2.83 kB
import tinycolor from '../utils/tinycolor2.js' function _colorChange(data, oldHue) { var alpha = data && data.a var color if (data && data.hsl) { color = tinycolor(data.hsl) } else if (data && data.hex && data.hex.length > 0) { color = tinycolor(data.hex) } else if (data && data.hsv) { color = tinycolor(data.hsv) } else if (data && data.rgba) { color = tinycolor(data.rgba) } else if (data && data.rgb) { color = tinycolor(data.rgb) } else { color = tinycolor(data) } if (color && (color._a === undefined || color._a === null)) { color.setAlpha(alpha || 1) } var hsl = color.toHsl() var hsv = color.toHsv() if (hsl.s === 0) { hsv.h = hsl.h = data.h || (data.hsl && data.hsl.h) || oldHue || 0 } return { hsl: hsl, hex: color.toHexString().toUpperCase(), hex8: color.toHex8String().toUpperCase(), rgba: color.toRgb(), hsv: hsv, oldHue: data.h || oldHue || hsl.h, source: data.source, a: data.a || color.getAlpha() } } export default { props: ['value'], data() { return { val: _colorChange(this.value) } }, computed: { colors: { get() { return this.val }, set(newVal) { this.val = newVal this.$emit('input', newVal) } }, widthNumber() { return this.toPx(this.width) }, heightNumber() { return this.toPx(this.height) } }, watch: { value(newVal) { this.val = _colorChange(newVal) } }, methods: { toPx(num) { if (typeof num === 'string') { if (num.indexOf('px') !== -1) { if (num.indexOf('rpx') !== -1) { // "10rpx" num = num.replace('rpx', ''); } else if (num.indexOf('upx') !== -1) { // "10upx" num = num.replace('upx', ''); } else { // "10px" return Number(num.replace('px', '')); } } else if (num.indexOf('%') !== -1) { let rate = Number(num.replace('%', '')) / 100; return uni.getSystemInfoSync().windowHeight * rate; } } return num ? uni.upx2px(Number(num)) : 0; }, colorChange(data, oldHue) { this.oldHue = this.colors.hsl.h this.colors = _colorChange(data, oldHue || this.oldHue) }, isValidHex(hex) { return tinycolor(hex).isValid() }, simpleCheckForValidColor(data) { var keysToCheck = ['r', 'g', 'b', 'a', 'h', 's', 'l', 'v'] var checked = 0 var passed = 0 for (var i = 0; i < keysToCheck.length; i++) { var letter = keysToCheck[i] if (data[letter]) { checked++ if (!isNaN(data[letter])) { passed++ } } } if (checked === passed) { return data } }, paletteUpperCase(palette) { return palette.map(c => c.toUpperCase()) }, isTransparent(color) { return tinycolor(color).getAlpha() === 0 } } }