mirror of
https://github.com/youzan/vant.git
synced 2026-01-20 07:00:14 +08:00
82 lines
1.7 KiB
TypeScript
82 lines
1.7 KiB
TypeScript
import { CSSProperties } from 'vue';
|
|
import { inBrowser } from '../base';
|
|
import { isDef, isNumeric } from '../validate';
|
|
|
|
export function addUnit(value?: string | number): string | undefined {
|
|
if (!isDef(value)) {
|
|
return undefined;
|
|
}
|
|
|
|
return isNumeric(value) ? `${value}px` : String(value);
|
|
}
|
|
|
|
export function getSizeStyle(
|
|
originSize?: string | number
|
|
): CSSProperties | undefined {
|
|
if (isDef(originSize)) {
|
|
const size = addUnit(originSize);
|
|
return {
|
|
width: size,
|
|
height: size,
|
|
};
|
|
}
|
|
}
|
|
|
|
export function getZIndexStyle(zIndex?: string | number) {
|
|
const style: CSSProperties = {};
|
|
if (zIndex !== undefined) {
|
|
style.zIndex = +zIndex;
|
|
}
|
|
return style;
|
|
}
|
|
|
|
// cache
|
|
let rootFontSize: number;
|
|
|
|
function getRootFontSize() {
|
|
if (!rootFontSize) {
|
|
const doc = document.documentElement;
|
|
const fontSize =
|
|
doc.style.fontSize || window.getComputedStyle(doc).fontSize;
|
|
|
|
rootFontSize = parseFloat(fontSize);
|
|
}
|
|
|
|
return rootFontSize;
|
|
}
|
|
|
|
function convertRem(value: string) {
|
|
value = value.replace(/rem/g, '');
|
|
return +value * getRootFontSize();
|
|
}
|
|
|
|
function convertVw(value: string) {
|
|
value = value.replace(/vw/g, '');
|
|
return (+value * window.innerWidth) / 100;
|
|
}
|
|
|
|
function convertVh(value: string) {
|
|
value = value.replace(/vh/g, '');
|
|
return (+value * window.innerHeight) / 100;
|
|
}
|
|
|
|
export function unitToPx(value: string | number): number {
|
|
if (typeof value === 'number') {
|
|
return value;
|
|
}
|
|
|
|
if (inBrowser) {
|
|
if (value.includes('rem')) {
|
|
return convertRem(value);
|
|
}
|
|
if (value.includes('vw')) {
|
|
return convertVw(value);
|
|
}
|
|
if (value.includes('vh')) {
|
|
return convertVh(value);
|
|
}
|
|
}
|
|
|
|
return parseFloat(value);
|
|
}
|