mirror of
https://github.com/Kuingsmile/PicList.git
synced 2026-05-06 20:42:57 +08:00
✨ Feature(custom): add infinite scroll animation for favorite badge
This commit is contained in:
@@ -43,7 +43,12 @@
|
|||||||
@touchend="handleBadgeTouchEnd"
|
@touchend="handleBadgeTouchEnd"
|
||||||
@touchcancel="handleBadgeTouchEnd"
|
@touchcancel="handleBadgeTouchEnd"
|
||||||
>
|
>
|
||||||
<span class="badge-name">{{ getAbbreviatedName(picbedType) }}</span>
|
<div class="badge-text-mask">
|
||||||
|
<div class="badge-text-track">
|
||||||
|
<span class="badge-name">{{ getPicbedName(picbedType) }}</span>
|
||||||
|
<span class="badge-name shadow-text">{{ getPicbedName(picbedType) }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<button
|
<button
|
||||||
v-if="longPressedBadge === picbedType.id"
|
v-if="longPressedBadge === picbedType.id"
|
||||||
class="badge-remove"
|
class="badge-remove"
|
||||||
@@ -943,26 +948,6 @@ function getPicbedName(picbedType: IFavoritePicbedItem): string {
|
|||||||
return `${target ? target.name : picbedType.type}-${picbedType.configName}`
|
return `${target ? target.name : picbedType.type}-${picbedType.configName}`
|
||||||
}
|
}
|
||||||
|
|
||||||
const truncatePart = (part: string): string => {
|
|
||||||
let partCount = 0
|
|
||||||
let res = ''
|
|
||||||
for (const char of part) {
|
|
||||||
const isDoubleByte = char.charCodeAt(0) > 127
|
|
||||||
const nextCount = partCount + (isDoubleByte ? 2 : 1)
|
|
||||||
if (nextCount > 4) {
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
res += char
|
|
||||||
partCount = nextCount
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
function getAbbreviatedName(picbedType: IFavoritePicbedItem): string {
|
|
||||||
const name = getPicbedName(picbedType)
|
|
||||||
return name.split('-').map(truncatePart).join('-')
|
|
||||||
}
|
|
||||||
|
|
||||||
function isCurrentPicbed(picbedType: IFavoritePicbedItem): boolean {
|
function isCurrentPicbed(picbedType: IFavoritePicbedItem): boolean {
|
||||||
return defaultIdG.value === picbedType.id
|
return defaultIdG.value === picbedType.id
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,6 +153,7 @@ html, body {
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.picbed-badge:hover {
|
.picbed-badge:hover {
|
||||||
@@ -162,6 +163,43 @@ html, body {
|
|||||||
transform: translateY(-1px);
|
transform: translateY(-1px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.badge-text-mask {
|
||||||
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-text-track {
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-text-track .badge-name.shadow-text {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.picbed-badge:hover .badge-text-track {
|
||||||
|
display: flex;
|
||||||
|
width: fit-content;
|
||||||
|
text-overflow: clip;
|
||||||
|
animation: badge-scroll 5s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.picbed-badge:hover .badge-name {
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.picbed-badge:hover .badge-name.shadow-text {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes badge-scroll {
|
||||||
|
0% { transform: translateX(0); }
|
||||||
|
100% { transform: translateX(-50%); }
|
||||||
|
}
|
||||||
|
|
||||||
.picbed-badge.is-active {
|
.picbed-badge.is-active {
|
||||||
border-color: var(--color-accent);
|
border-color: var(--color-accent);
|
||||||
border-width: 0.1rem;
|
border-width: 0.1rem;
|
||||||
@@ -174,9 +212,6 @@ html, body {
|
|||||||
|
|
||||||
.badge-name {
|
.badge-name {
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
flex: 1;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user