我建议为此使用sessionStorage
。
首先,从HTML中删除所有onclick=refreshPage()
。您想将所有JS代码保留在JS内,并将所有处理程序放在一个位置。最佳做法是完全不要使用onclick
。
接下来,创建两个函数:loadState()
和saveState()
。您需要在每次加载页面(刷新)时调用loadState()
,每次单击切换按钮时都需要调用saveState()
。
在处理单击按钮的处理程序中,还要执行页面刷新。
整个JS代码:
$(window).on('load',function() {
loadState();
});
$('.read-more-toggle').on('click',function() {
$(this).next('.read-more-content').toggleClass('hide');
saveState();
refreshPage();
});
// Fold or unfold each content based on state before refresh
// And go to same scroll position before refresh
function loadState() {
let hidden_states = sessionStorage.getItem('hidden-states');
if (!hidden_states) {
return;
}
hidden_states = hidden_states.split(',');
$('.read-more-content').each(function(i,elem) {
if (hidden_states[i] === 'hide') {
elem.classList.add('hide');
}
else {
elem.classList.remove('hide');
}
});
document.scrollingElement.scrollLeft = sessionStorage.getItem('scroll-x');
document.scrollingElement.scrollTop = sessionStorage.getItem('scroll-y');
}
// Remember fold & unfold states,and scroll positions
function saveState() {
let hidden_states = [];
$('.read-more-content').each(function(i,elem) {
hidden_states.push(elem.classList.contains('hide') ? 'hide' : 'show');
});
sessionStorage.setItem('hidden-states',hidden_states);
sessionStorage.setItem('scroll-x',document.scrollingElement.scrollLeft);
sessionStorage.setItem('scroll-y',document.scrollingElement.scrollTop);
}
function refreshPage() {
window.location.reload();
}
注意:如果可能,请尽量避免刷新页面。存储视图状态,然后在刷新后感觉不太理想,然后重新创建它们。在某些浏览器中,重新绘制恢复的状态时,它有时还会导致滚动跳跃毛刺。
最后,请考虑您的项目是否真的需要jQuery。大多数功能都可以在原始JS中实现。
本文链接:https://www.f2er.com/3165486.html