✌️
This commit is contained in:
parent
dd0d86cbb6
commit
9923cfaf50
4 changed files with 28 additions and 8 deletions
|
@ -90,6 +90,13 @@ export default defineComponent({
|
|||
}
|
||||
});
|
||||
|
||||
function onBeforeLeave(el: HTMLElement) {
|
||||
el.style.top = `${el.offsetTop}px`;
|
||||
}
|
||||
function onLeaveCanceled(el: HTMLElement) {
|
||||
el.style.top = '';
|
||||
}
|
||||
|
||||
return () => h(
|
||||
defaultStore.state.animation ? TransitionGroup : 'div',
|
||||
defaultStore.state.animation ? {
|
||||
|
@ -101,6 +108,8 @@ export default defineComponent({
|
|||
tag: 'div',
|
||||
'data-direction': props.direction,
|
||||
'data-reversed': props.reversed ? 'true' : 'false',
|
||||
onBeforeLeave,
|
||||
onLeaveCanceled,
|
||||
} : {
|
||||
class: {
|
||||
'sqadhkmv': true,
|
||||
|
@ -123,17 +132,25 @@ export default defineComponent({
|
|||
> *:not(:last-child) {
|
||||
margin-bottom: var(--margin);
|
||||
}
|
||||
|
||||
&:not(.deny-move-transition) > * {
|
||||
|
||||
> .list-move {
|
||||
transition: transform 0.7s cubic-bezier(0.23, 1, 0.32, 1);
|
||||
}
|
||||
|
||||
&.deny-move-transition > .list-move {
|
||||
transition: none !important;
|
||||
}
|
||||
|
||||
> .list-leave-active,
|
||||
> .list-enter-active {
|
||||
transition: transform 0.7s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.7s cubic-bezier(0.23, 1, 0.32, 1);
|
||||
}
|
||||
|
||||
> .list-leave-from,
|
||||
> .list-leave-to,
|
||||
> .list-leave-active {
|
||||
position: absolute;
|
||||
transition: transform 0.7s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.7s cubic-bezier(0.23, 1, 0.32, 1);
|
||||
position: absolute !important;
|
||||
}
|
||||
|
||||
&[data-direction="up"] {
|
||||
|
|
|
@ -66,6 +66,7 @@ function del() {
|
|||
position: relative;
|
||||
background-color: transparent;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
|
||||
> .avatar {
|
||||
position: sticky;
|
||||
|
@ -249,6 +250,7 @@ function del() {
|
|||
&.isMe {
|
||||
flex-direction: row-reverse;
|
||||
padding-right: var(--margin);
|
||||
right: var(--margin); // 削除時にposition: absoluteになったときに使う
|
||||
|
||||
> .content {
|
||||
padding-right: 16px;
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
<MkEllipsis/>
|
||||
</div>
|
||||
<transition :name="animation ? 'fade' : ''">
|
||||
<div class="new-message" v-if="showIndicator">
|
||||
<div class="new-message" v-show="showIndicator">
|
||||
<button class="_buttonPrimary" @click="onIndicatorClick"><i class="fas fa-fw fa-arrow-circle-down"></i>{{ i18n.locale.newMessageExists }}</button>
|
||||
</div>
|
||||
</transition>
|
||||
|
@ -324,14 +324,15 @@ defineExpose({
|
|||
position: sticky;
|
||||
z-index: 2;
|
||||
bottom: 8px;
|
||||
padding-top: 8px;
|
||||
|
||||
@media (max-width: 500px) {
|
||||
bottom: 100px;
|
||||
bottom: 92px;
|
||||
}
|
||||
|
||||
> .new-message {
|
||||
width: 100%;
|
||||
padding: 8px 0;
|
||||
padding-bottom: 8px;
|
||||
text-align: center;
|
||||
|
||||
> button {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
type ScrollBehavior = 'auto' | 'smooth' | 'instant';
|
||||
|
||||
export function getScrollContainer(el: HTMLElement | null): HTMLElement | null {
|
||||
if (el == null) return null;
|
||||
if (el == null || el.tagName === 'HTML') return null;
|
||||
if (el.scrollHeight > el.clientHeight) {
|
||||
return el;
|
||||
} else {
|
||||
|
@ -77,7 +77,6 @@ export function scrollToBottom(el: HTMLElement, options: { behavior?: ScrollBeha
|
|||
scroll(el, { top: el.scrollHeight, ...options }); // TODO: ちゃんと計算する
|
||||
}
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled
|
||||
export function isBottom(el: HTMLElement, asobi = 1) {
|
||||
const container = getScrollContainer(el);
|
||||
return isScrollBottom(container, asobi);
|
||||
|
@ -92,6 +91,7 @@ export function getBodyScrollHeight() {
|
|||
);
|
||||
}
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled
|
||||
export function isScrollBottom(container?: HTMLElement | null, asobi = 1) {
|
||||
if (container) return container.scrollHeight - Math.abs(container.scrollTop) <= container.clientHeight + asobi;
|
||||
return getBodyScrollHeight() - window.scrollY <= window.innerHeight + asobi;
|
||||
|
|
Loading…
Reference in a new issue