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

View File

@ -1874,17 +1874,23 @@
})
const chatScrollInfo = {};
let debounceTimer
getRef('chat_middle').addEventListener('scroll', function() {
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')
if(debounceTimer){
window.clearTimeout(debounceTimer)
}
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})
getRef('send_mail_to').addEventListener('input', function() {