Merge pull request #256 from LOG1997/release_0.6.0-beta4
Release 0.6.0 beta4
19
__test__/ElementPosition.test.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { describe, it, expect } from 'vitest'
|
||||||
|
import { useElementPosition } from '@/hooks/useElement'
|
||||||
|
|
||||||
|
describe('useElementPosition', () => {
|
||||||
|
it('works for totalCount = 40 without throwing', () => {
|
||||||
|
const element = {} as any
|
||||||
|
const count = 10
|
||||||
|
const totalCount = 40
|
||||||
|
const cardSize = { width: 140, height: 200 }
|
||||||
|
const windowSize = { width: 800, height: 600 }
|
||||||
|
const cardIndex = 0
|
||||||
|
|
||||||
|
const result = useElementPosition(element, count, totalCount, cardSize, windowSize, cardIndex)
|
||||||
|
expect(result).toHaveProperty('xTable')
|
||||||
|
expect(result).toHaveProperty('yTable')
|
||||||
|
expect(result).toHaveProperty('scale')
|
||||||
|
expect(typeof result.scale).toBe('number')
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "log-lottery",
|
"name": "log-lottery",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.6.0-3",
|
"version": "0.6.0-4",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
2
src-tauri/Cargo.lock
generated
@@ -77,7 +77,7 @@ checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "app"
|
name = "app"
|
||||||
version = "0.6.0-3"
|
version = "0.6.0-4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"serde",
|
"serde",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "app"
|
name = "app"
|
||||||
version = "0.6.0-3"
|
version = "0.6.0-4"
|
||||||
description = "A Tauri App"
|
description = "A Tauri App"
|
||||||
authors = [ "you" ]
|
authors = [ "you" ]
|
||||||
license = ""
|
license = ""
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
|
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
|
||||||
"productName": "log-lottery",
|
"productName": "log-lottery",
|
||||||
"version": "0.6.0-3",
|
"version": "0.6.0-4",
|
||||||
"identifier": "to2026.xyz",
|
"identifier": "to2026.xyz",
|
||||||
"build": {
|
"build": {
|
||||||
"frontendDist": "../dist",
|
"frontendDist": "../dist",
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export const SINGLE_TIME_MAX_PERSON_COUNT = 30
|
export const SINGLE_TIME_MAX_PERSON_COUNT = 40
|
||||||
export const CONFETTI_FIRE_MAX_COUNT = 12
|
export const CONFETTI_FIRE_MAX_COUNT = 12
|
||||||
|
|||||||
@@ -262,6 +262,16 @@ const cardRule: CardRule = {
|
|||||||
/**
|
/**
|
||||||
* @description 设置抽中卡片的位置
|
* @description 设置抽中卡片的位置
|
||||||
*/
|
*/
|
||||||
|
function createRuleForCount(count: number) {
|
||||||
|
// 动态生成规则:行数在 3-5 之间,尽可能均匀分配
|
||||||
|
const len = Math.min(5, Math.max(3, Math.ceil(count / 10)))
|
||||||
|
const base = Math.floor(count / len)
|
||||||
|
let rem = count % len
|
||||||
|
const rule = Array.from({ length: len }).fill(0).map(() => base + (rem > 0 ? (rem--, 1) : 0))
|
||||||
|
const scale = Math.max(0.9, 1.2 - (len - 3) * 0.1)
|
||||||
|
return { maxLine: Math.min(10, Math.ceil(count / len)), scale, rule, length: len }
|
||||||
|
}
|
||||||
|
|
||||||
export function useElementPosition(
|
export function useElementPosition(
|
||||||
element: any,
|
element: any,
|
||||||
count: number,
|
count: number,
|
||||||
@@ -280,7 +290,8 @@ export function useElementPosition(
|
|||||||
x: 0,
|
x: 0,
|
||||||
y: windowSize.height / 2,
|
y: windowSize.height / 2,
|
||||||
}
|
}
|
||||||
const { scale, rule, length } = cardRule[totalCount]
|
const ruleObj = cardRule[totalCount] ?? createRuleForCount(totalCount)
|
||||||
|
const { scale, rule, length } = ruleObj
|
||||||
// 计算缩放后的卡片尺寸
|
// 计算缩放后的卡片尺寸
|
||||||
const scaledCardWidth = cardSize.width * scale
|
const scaledCardWidth = cardSize.width * scale
|
||||||
const scaledCardHeight = cardSize.height * scale
|
const scaledCardHeight = cardSize.height * scale
|
||||||
@@ -311,7 +322,7 @@ export function useElementPosition(
|
|||||||
// 修改此处逻辑,确保当length=2时,两行围绕中心点对称分布
|
// 修改此处逻辑,确保当length=2时,两行围绕中心点对称分布
|
||||||
centerPosition.y = windowSize.height / 2 - totalHeight / 2
|
centerPosition.y = windowSize.height / 2 - totalHeight / 2
|
||||||
|
|
||||||
yTable = centerPosition.y + currentRow * verticalSpacing + centerYOffset + scaledCardHeight / 2 // 添加卡片高度的一半作为修正
|
yTable = centerPosition.y + currentRow * verticalSpacing + centerYOffset // 添加卡片高度的一半作为修正
|
||||||
// 计算当前行的水平居中偏移
|
// 计算当前行的水平居中偏移
|
||||||
const horizontalSpacing = scaledCardWidth * 1.2 // 水平间距基于缩放后的宽度
|
const horizontalSpacing = scaledCardWidth * 1.2 // 水平间距基于缩放后的宽度
|
||||||
const rowWidth = (cardsInCurrentRow - 1) * horizontalSpacing
|
const rowWidth = (cardsInCurrentRow - 1) * horizontalSpacing
|
||||||
|
|||||||
@@ -111,4 +111,4 @@
|
|||||||
height: 240px !important;
|
height: 240px !important;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 187 KiB |
|
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 280 KiB |
|
Before Width: | Height: | Size: 181 KiB After Width: | Height: | Size: 253 KiB |
|
Before Width: | Height: | Size: 669 KiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 727 KiB After Width: | Height: | Size: 1.3 MiB |