From 2f540a022b2c82b71152b165ac5197184da70b72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= Date: Sun, 27 Jan 2019 22:13:51 +0100 Subject: [PATCH] showMore: delay dom size check - it was f**ing slow! --- src/showMore.js | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/showMore.js b/src/showMore.js index 33e8404d..58173fc4 100644 --- a/src/showMore.js +++ b/src/showMore.js @@ -1,5 +1,24 @@ require('./showMore.css') +function delayedUpdate (dom, p) { + if (!p.timer) { + p.timer = global.setTimeout( + () => { + delete p.timer + + if (dom.scrollHeight > dom.offsetHeight && dom.classList.contains('collapsed')) { + p.classList.add('active') + } + + if (dom.scrollHeight <= dom.offsetHeight && dom.classList.contains('collapsed')) { + p.classList.remove('active') + } + }, + 1 + ) + } +} + function showMore (category, dom) { dom.classList.add('collapsed') @@ -17,19 +36,12 @@ function showMore (category, dom) { } p.appendChild(a) - category.on('add', () => { - if (dom.scrollHeight > dom.offsetHeight && dom.classList.contains('collapsed')) { - p.classList.add('active') - } - }) - category.on('remove', () => { - if (dom.scrollHeight <= dom.offsetHeight && dom.classList.contains('collapsed')) { - p.classList.remove('active') - } - }) + category.on('add', delayedUpdate.bind(this, dom, p)) + category.on('remove', delayedUpdate.bind(this, dom, p)) category.on('open', () => { p.classList.remove('active') dom.classList.add('collapsed') + delayedUpdate(dom, p) }) }