mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 15:34:13 +00:00 
			
		
		
		
	refactor(frontend): use scrollX or scrollY (#13645)
				
					
				
			This commit is contained in:
		
							parent
							
								
									61978cb4ca
								
							
						
					
					
						commit
						b4b47d85cf
					
				
					 6 changed files with 42 additions and 42 deletions
				
			
		| 
						 | 
				
			
			@ -47,12 +47,12 @@ onMounted(() => {
 | 
			
		|||
	const width = rootEl.value!.offsetWidth;
 | 
			
		||||
	const height = rootEl.value!.offsetHeight;
 | 
			
		||||
 | 
			
		||||
	if (left + width - window.pageXOffset >= (window.innerWidth - SCROLLBAR_THICKNESS)) {
 | 
			
		||||
		left = (window.innerWidth - SCROLLBAR_THICKNESS) - width + window.pageXOffset;
 | 
			
		||||
	if (left + width - window.scrollX >= (window.innerWidth - SCROLLBAR_THICKNESS)) {
 | 
			
		||||
		left = (window.innerWidth - SCROLLBAR_THICKNESS) - width + window.scrollX;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (top + height - window.pageYOffset >= (window.innerHeight - SCROLLBAR_THICKNESS)) {
 | 
			
		||||
		top = (window.innerHeight - SCROLLBAR_THICKNESS) - height + window.pageYOffset;
 | 
			
		||||
	if (top + height - window.scrollY >= (window.innerHeight - SCROLLBAR_THICKNESS)) {
 | 
			
		||||
		top = (window.innerHeight - SCROLLBAR_THICKNESS) - height + window.scrollY;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (top < 0) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -175,8 +175,8 @@ const align = () => {
 | 
			
		|||
	let left;
 | 
			
		||||
	let top;
 | 
			
		||||
 | 
			
		||||
	const x = srcRect.left + (fixed.value ? 0 : window.pageXOffset);
 | 
			
		||||
	const y = srcRect.top + (fixed.value ? 0 : window.pageYOffset);
 | 
			
		||||
	const x = srcRect.left + (fixed.value ? 0 : window.scrollX);
 | 
			
		||||
	const y = srcRect.top + (fixed.value ? 0 : window.scrollY);
 | 
			
		||||
 | 
			
		||||
	if (props.anchor.x === 'center') {
 | 
			
		||||
		left = x + (props.src.offsetWidth / 2) - (width / 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -220,24 +220,24 @@ const align = () => {
 | 
			
		|||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		// 画面から横にはみ出る場合
 | 
			
		||||
		if (left + width - window.pageXOffset > (window.innerWidth - SCROLLBAR_THICKNESS)) {
 | 
			
		||||
			left = (window.innerWidth - SCROLLBAR_THICKNESS) - width + window.pageXOffset - 1;
 | 
			
		||||
		if (left + width - window.scrollX > (window.innerWidth - SCROLLBAR_THICKNESS)) {
 | 
			
		||||
			left = (window.innerWidth - SCROLLBAR_THICKNESS) - width + window.scrollX - 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		const underSpace = ((window.innerHeight - SCROLLBAR_THICKNESS) - MARGIN) - (top - window.pageYOffset);
 | 
			
		||||
		const underSpace = ((window.innerHeight - SCROLLBAR_THICKNESS) - MARGIN) - (top - window.scrollY);
 | 
			
		||||
		const upperSpace = (srcRect.top - MARGIN);
 | 
			
		||||
 | 
			
		||||
		// 画面から縦にはみ出る場合
 | 
			
		||||
		if (top + height - window.pageYOffset > ((window.innerHeight - SCROLLBAR_THICKNESS) - MARGIN)) {
 | 
			
		||||
		if (top + height - window.scrollY > ((window.innerHeight - SCROLLBAR_THICKNESS) - MARGIN)) {
 | 
			
		||||
			if (props.noOverlap && props.anchor.x === 'center') {
 | 
			
		||||
				if (underSpace >= (upperSpace / 3)) {
 | 
			
		||||
					maxHeight.value = underSpace;
 | 
			
		||||
				} else {
 | 
			
		||||
					maxHeight.value = upperSpace;
 | 
			
		||||
					top = window.pageYOffset + ((upperSpace + MARGIN) - height);
 | 
			
		||||
					top = window.scrollY + ((upperSpace + MARGIN) - height);
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				top = ((window.innerHeight - SCROLLBAR_THICKNESS) - MARGIN) - height + window.pageYOffset - 1;
 | 
			
		||||
				top = ((window.innerHeight - SCROLLBAR_THICKNESS) - MARGIN) - height + window.scrollY - 1;
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			maxHeight.value = underSpace;
 | 
			
		||||
| 
						 | 
				
			
			@ -255,15 +255,15 @@ const align = () => {
 | 
			
		|||
	let transformOriginX = 'center';
 | 
			
		||||
	let transformOriginY = 'center';
 | 
			
		||||
 | 
			
		||||
	if (top >= srcRect.top + props.src.offsetHeight + (fixed.value ? 0 : window.pageYOffset)) {
 | 
			
		||||
	if (top >= srcRect.top + props.src.offsetHeight + (fixed.value ? 0 : window.scrollY)) {
 | 
			
		||||
		transformOriginY = 'top';
 | 
			
		||||
	} else if ((top + height) <= srcRect.top + (fixed.value ? 0 : window.pageYOffset)) {
 | 
			
		||||
	} else if ((top + height) <= srcRect.top + (fixed.value ? 0 : window.scrollY)) {
 | 
			
		||||
		transformOriginY = 'bottom';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (left >= srcRect.left + props.src.offsetWidth + (fixed.value ? 0 : window.pageXOffset)) {
 | 
			
		||||
	if (left >= srcRect.left + props.src.offsetWidth + (fixed.value ? 0 : window.scrollX)) {
 | 
			
		||||
		transformOriginX = 'left';
 | 
			
		||||
	} else if ((left + width) <= srcRect.left + (fixed.value ? 0 : window.pageXOffset)) {
 | 
			
		||||
	} else if ((left + width) <= srcRect.left + (fixed.value ? 0 : window.scrollX)) {
 | 
			
		||||
		transformOriginX = 'right';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,8 +33,8 @@ const left = ref(0);
 | 
			
		|||
 | 
			
		||||
onMounted(() => {
 | 
			
		||||
	const rect = props.source.getBoundingClientRect();
 | 
			
		||||
	const x = Math.max((rect.left + (props.source.offsetWidth / 2)) - (300 / 2), 6) + window.pageXOffset;
 | 
			
		||||
	const y = rect.top + props.source.offsetHeight + window.pageYOffset;
 | 
			
		||||
	const x = Math.max((rect.left + (props.source.offsetWidth / 2)) - (300 / 2), 6) + window.scrollX;
 | 
			
		||||
	const y = rect.top + props.source.offsetHeight + window.scrollY;
 | 
			
		||||
 | 
			
		||||
	top.value = y;
 | 
			
		||||
	left.value = x;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,8 +106,8 @@ onMounted(() => {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	const rect = props.source.getBoundingClientRect();
 | 
			
		||||
	const x = ((rect.left + (props.source.offsetWidth / 2)) - (300 / 2)) + window.pageXOffset;
 | 
			
		||||
	const y = rect.top + props.source.offsetHeight + window.pageYOffset;
 | 
			
		||||
	const x = ((rect.left + (props.source.offsetWidth / 2)) - (300 / 2)) + window.scrollX;
 | 
			
		||||
	const y = rect.top + props.source.offsetHeight + window.scrollY;
 | 
			
		||||
 | 
			
		||||
	top.value = y;
 | 
			
		||||
	left.value = x;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,8 +26,8 @@ export function calcPopupPosition(el: HTMLElement, props: {
 | 
			
		|||
		let top: number;
 | 
			
		||||
 | 
			
		||||
		if (props.anchorElement) {
 | 
			
		||||
			left = rect.left + window.pageXOffset + (props.anchorElement.offsetWidth / 2);
 | 
			
		||||
			top = (rect.top + window.pageYOffset - contentHeight) - props.innerMargin;
 | 
			
		||||
			left = rect.left + window.scrollX + (props.anchorElement.offsetWidth / 2);
 | 
			
		||||
			top = (rect.top + window.scrollY - contentHeight) - props.innerMargin;
 | 
			
		||||
		} else {
 | 
			
		||||
			left = props.x;
 | 
			
		||||
			top = (props.y - contentHeight) - props.innerMargin;
 | 
			
		||||
| 
						 | 
				
			
			@ -35,8 +35,8 @@ export function calcPopupPosition(el: HTMLElement, props: {
 | 
			
		|||
 | 
			
		||||
		left -= (el.offsetWidth / 2);
 | 
			
		||||
 | 
			
		||||
		if (left + contentWidth - window.pageXOffset > window.innerWidth) {
 | 
			
		||||
			left = window.innerWidth - contentWidth + window.pageXOffset - 1;
 | 
			
		||||
		if (left + contentWidth - window.scrollX > window.innerWidth) {
 | 
			
		||||
			left = window.innerWidth - contentWidth + window.scrollX - 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return [left, top];
 | 
			
		||||
| 
						 | 
				
			
			@ -47,8 +47,8 @@ export function calcPopupPosition(el: HTMLElement, props: {
 | 
			
		|||
		let top: number;
 | 
			
		||||
 | 
			
		||||
		if (props.anchorElement) {
 | 
			
		||||
			left = rect.left + window.pageXOffset + (props.anchorElement.offsetWidth / 2);
 | 
			
		||||
			top = (rect.top + window.pageYOffset + props.anchorElement.offsetHeight) + props.innerMargin;
 | 
			
		||||
			left = rect.left + window.scrollX + (props.anchorElement.offsetWidth / 2);
 | 
			
		||||
			top = (rect.top + window.scrollY + props.anchorElement.offsetHeight) + props.innerMargin;
 | 
			
		||||
		} else {
 | 
			
		||||
			left = props.x;
 | 
			
		||||
			top = (props.y) + props.innerMargin;
 | 
			
		||||
| 
						 | 
				
			
			@ -56,8 +56,8 @@ export function calcPopupPosition(el: HTMLElement, props: {
 | 
			
		|||
 | 
			
		||||
		left -= (el.offsetWidth / 2);
 | 
			
		||||
 | 
			
		||||
		if (left + contentWidth - window.pageXOffset > window.innerWidth) {
 | 
			
		||||
			left = window.innerWidth - contentWidth + window.pageXOffset - 1;
 | 
			
		||||
		if (left + contentWidth - window.scrollX > window.innerWidth) {
 | 
			
		||||
			left = window.innerWidth - contentWidth + window.scrollX - 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return [left, top];
 | 
			
		||||
| 
						 | 
				
			
			@ -68,8 +68,8 @@ export function calcPopupPosition(el: HTMLElement, props: {
 | 
			
		|||
		let top: number;
 | 
			
		||||
 | 
			
		||||
		if (props.anchorElement) {
 | 
			
		||||
			left = (rect.left + window.pageXOffset - contentWidth) - props.innerMargin;
 | 
			
		||||
			top = rect.top + window.pageYOffset + (props.anchorElement.offsetHeight / 2);
 | 
			
		||||
			left = (rect.left + window.scrollX - contentWidth) - props.innerMargin;
 | 
			
		||||
			top = rect.top + window.scrollY + (props.anchorElement.offsetHeight / 2);
 | 
			
		||||
		} else {
 | 
			
		||||
			left = (props.x - contentWidth) - props.innerMargin;
 | 
			
		||||
			top = props.y;
 | 
			
		||||
| 
						 | 
				
			
			@ -77,8 +77,8 @@ export function calcPopupPosition(el: HTMLElement, props: {
 | 
			
		|||
 | 
			
		||||
		top -= (el.offsetHeight / 2);
 | 
			
		||||
 | 
			
		||||
		if (top + contentHeight - window.pageYOffset > window.innerHeight) {
 | 
			
		||||
			top = window.innerHeight - contentHeight + window.pageYOffset - 1;
 | 
			
		||||
		if (top + contentHeight - window.scrollY > window.innerHeight) {
 | 
			
		||||
			top = window.innerHeight - contentHeight + window.scrollY - 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return [left, top];
 | 
			
		||||
| 
						 | 
				
			
			@ -89,15 +89,15 @@ export function calcPopupPosition(el: HTMLElement, props: {
 | 
			
		|||
		let top: number;
 | 
			
		||||
 | 
			
		||||
		if (props.anchorElement) {
 | 
			
		||||
			left = (rect.left + props.anchorElement.offsetWidth + window.pageXOffset) + props.innerMargin;
 | 
			
		||||
			left = (rect.left + props.anchorElement.offsetWidth + window.scrollX) + props.innerMargin;
 | 
			
		||||
 | 
			
		||||
			if (props.align === 'top') {
 | 
			
		||||
				top = rect.top + window.pageYOffset;
 | 
			
		||||
				top = rect.top + window.scrollY;
 | 
			
		||||
				if (props.alignOffset != null) top += props.alignOffset;
 | 
			
		||||
			} else if (props.align === 'bottom') {
 | 
			
		||||
				// TODO
 | 
			
		||||
			} else { // center
 | 
			
		||||
				top = rect.top + window.pageYOffset + (props.anchorElement.offsetHeight / 2);
 | 
			
		||||
				top = rect.top + window.scrollY + (props.anchorElement.offsetHeight / 2);
 | 
			
		||||
				top -= (el.offsetHeight / 2);
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -106,8 +106,8 @@ export function calcPopupPosition(el: HTMLElement, props: {
 | 
			
		|||
			top -= (el.offsetHeight / 2);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (top + contentHeight - window.pageYOffset > window.innerHeight) {
 | 
			
		||||
			top = window.innerHeight - contentHeight + window.pageYOffset - 1;
 | 
			
		||||
		if (top + contentHeight - window.scrollY > window.innerHeight) {
 | 
			
		||||
			top = window.innerHeight - contentHeight + window.scrollY - 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return [left, top];
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +123,7 @@ export function calcPopupPosition(el: HTMLElement, props: {
 | 
			
		|||
				const [left, top] = calcPosWhenTop();
 | 
			
		||||
 | 
			
		||||
				// ツールチップを上に向かって表示するスペースがなければ下に向かって出す
 | 
			
		||||
				if (top - window.pageYOffset < 0) {
 | 
			
		||||
				if (top - window.scrollY < 0) {
 | 
			
		||||
					const [left, top] = calcPosWhenBottom();
 | 
			
		||||
					return { left, top, transformOrigin: 'center top' };
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -141,7 +141,7 @@ export function calcPopupPosition(el: HTMLElement, props: {
 | 
			
		|||
				const [left, top] = calcPosWhenLeft();
 | 
			
		||||
 | 
			
		||||
				// ツールチップを左に向かって表示するスペースがなければ右に向かって出す
 | 
			
		||||
				if (left - window.pageXOffset < 0) {
 | 
			
		||||
				if (left - window.scrollX < 0) {
 | 
			
		||||
					const [left, top] = calcPosWhenRight();
 | 
			
		||||
					return { left, top, transformOrigin: 'left center' };
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,11 +53,11 @@ export function useChartTooltip(opts: { position: 'top' | 'middle' } = { positio
 | 
			
		|||
		const rect = context.chart.canvas.getBoundingClientRect();
 | 
			
		||||
 | 
			
		||||
		tooltipShowing.value = true;
 | 
			
		||||
		tooltipX.value = rect.left + window.pageXOffset + context.tooltip.caretX;
 | 
			
		||||
		tooltipX.value = rect.left + window.scrollX + context.tooltip.caretX;
 | 
			
		||||
		if (opts.position === 'top') {
 | 
			
		||||
			tooltipY.value = rect.top + window.pageYOffset;
 | 
			
		||||
			tooltipY.value = rect.top + window.scrollY;
 | 
			
		||||
		} else if (opts.position === 'middle') {
 | 
			
		||||
			tooltipY.value = rect.top + window.pageYOffset + context.tooltip.caretY;
 | 
			
		||||
			tooltipY.value = rect.top + window.scrollY + context.tooltip.caretY;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue