Perf: improve messages scrolling using debouncing
This commit is contained in:
sairaj mote 2021-02-09 20:37:25 +05:30
parent 5bee7ce37f
commit bc4dbf6c03
4 changed files with 32 additions and 14 deletions

View File

@ -1456,7 +1456,7 @@ sm-button.danger {
#chat_footer .flex { #chat_footer .flex {
align-items: flex-end; align-items: flex-end;
padding: 1rem 1rem 1rem 0.4rem; padding: 0.5rem 1rem 0.5rem 0.5rem;
} }
#chat_footer sm-textarea::part(textarea) { #chat_footer sm-textarea::part(textarea) {
padding-right: 3rem; padding-right: 3rem;
@ -1526,6 +1526,8 @@ sm-button.danger {
--input-border-color: rgba(var(--text-color), 0.6); --input-border-color: rgba(var(--text-color), 0.6);
--input-padding: 0.4rem 1rem; --input-padding: 0.4rem 1rem;
--outline-color: var(--accent-color); --outline-color: var(--accent-color);
--input-font-color: var(--text-color);
--input-placeholder-color: rgba(var(--text-color), 0.6);
user-select: none; user-select: none;
width: 100%; width: 100%;
max-height: 40vh; max-height: 40vh;
@ -1615,6 +1617,9 @@ sm-panel {
.has-bg-image .date-card { .has-bg-image .date-card {
background: rgba(var(--foreground-color), 0.6); background: rgba(var(--foreground-color), 0.6);
} }
.has-bg-image .received::after {
border-color: transparent rgba(var(--foreground-color), 0.6) transparent transparent;
}
.has-bg-image #emoji_picker { .has-bg-image #emoji_picker {
--background: rgba(var(--foreground-color), 0.6); --background: rgba(var(--foreground-color), 0.6);
} }
@ -1859,6 +1864,7 @@ sm-panel {
#settings_page #settings_header { #settings_page #settings_header {
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 1;
padding: 1rem 1.5rem; padding: 1rem 1.5rem;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
background: rgba(var(--foreground-color), 1); background: rgba(var(--foreground-color), 1);
@ -1997,7 +2003,7 @@ sm-panel {
} }
@media only screen and (min-width: 1080px) { @media only screen and (min-width: 1080px) {
#chat #messages_container { #chat #messages_container {
padding: 1rem 5rem; padding: 1rem 4rem;
} }
} }
@media only screen and (min-width: 1280px) { @media only screen and (min-width: 1280px) {

2
css/main.min.css vendored

File diff suppressed because one or more lines are too long

View File

@ -1373,7 +1373,7 @@ sm-button.danger{
#chat_footer{ #chat_footer{
.flex{ .flex{
align-items: flex-end; align-items: flex-end;
padding: 1rem 1rem 1rem 0.4rem; padding: 0.5rem 1rem 0.5rem 0.5rem;
} }
sm-textarea::part(textarea){ sm-textarea::part(textarea){
padding-right: 3rem; padding-right: 3rem;
@ -1438,6 +1438,8 @@ sm-button.danger{
--input-border-color: rgba(var(--text-color), 0.6); --input-border-color: rgba(var(--text-color), 0.6);
--input-padding: 0.4rem 1rem; --input-padding: 0.4rem 1rem;
--outline-color: var(--accent-color); --outline-color: var(--accent-color);
--input-font-color: var(--text-color);
--input-placeholder-color: rgba(var(--text-color), 0.6);
user-select: none; user-select: none;
width: 100%; width: 100%;
max-height: 40vh; max-height: 40vh;
@ -1521,6 +1523,9 @@ sm-panel{
.date-card{ .date-card{
background: rgba(var(--foreground-color), 0.6); background: rgba(var(--foreground-color), 0.6);
} }
.received::after{
border-color: transparent rgba(var(--foreground-color), 0.6) transparent transparent;
}
#emoji_picker{ #emoji_picker{
--background: rgba(var(--foreground-color), 0.6); --background: rgba(var(--foreground-color), 0.6);
} }
@ -1757,6 +1762,7 @@ sm-panel{
#settings_header{ #settings_header{
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 1;
padding: 1rem 1.5rem; padding: 1rem 1.5rem;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
background: rgba(var(--foreground-color), 1); background: rgba(var(--foreground-color), 1);
@ -1882,7 +1888,7 @@ sm-panel{
@media only screen and (min-width: 1080px){ @media only screen and (min-width: 1080px){
#chat{ #chat{
#messages_container{ #messages_container{
padding: 1rem 5rem; padding: 1rem 4rem;
} }
} }
} }

View File

@ -1874,17 +1874,23 @@
}) })
const chatScrollInfo = {}; const chatScrollInfo = {};
let debounceTimer
getRef('chat_middle').addEventListener('scroll', function() { getRef('chat_middle').addEventListener('scroll', function() {
chatScrollInfo['scrollTop'] = this.scrollTop if(debounceTimer){
chatScrollInfo['scrollheight'] = this.scrollHeight window.clearTimeout(debounceTimer)
if((this.scrollHeight > this.clientHeight) && (this.scrollHeight - this.clientHeight - this.scrollTop >= 100)){
chatScrollInfo['isScrolledUp'] = true
getRef('scroll_to_bottom').classList.add('no-transformations')
}
else{
chatScrollInfo['isScrolledUp'] = false
getRef('scroll_to_bottom').classList.remove('no-transformations', 'new-message')
} }
debounceTimer = setTimeout(e => {
chatScrollInfo['scrollTop'] = this.scrollTop
chatScrollInfo['scrollheight'] = this.scrollHeight
if((this.scrollHeight > this.clientHeight) && (this.scrollHeight - this.clientHeight - this.scrollTop >= 100)){
chatScrollInfo['isScrolledUp'] = true
getRef('scroll_to_bottom').classList.add('no-transformations')
}
else{
chatScrollInfo['isScrolledUp'] = false
getRef('scroll_to_bottom').classList.remove('no-transformations', 'new-message')
}
}, 100)
}, {passive: true}) }, {passive: true})
getRef('send_mail_to').addEventListener('input', function() { getRef('send_mail_to').addEventListener('input', function() {