同位素 URL 哈希在页面加载时调用时不起作用
Isotope URL Hash not working when called on page load
我遇到了 Isotope 问题,我已切换到 URL 哈希过滤方法,因为我需要能够将访问者发送到已启用过滤器的页面。
当我正常使用过滤器时 - 即页面加载未过滤并且单击按钮激活过滤器时,一切都按预期工作。
当从另一个带有 URL 中的散列的页面到达时,它确实激活了过滤,但它没有正确隐藏剩余的项目 - 相反,它们都聚集在 0,0 绝对并且没有隐藏。只有过滤后的项目布局正确,就像这样(为了一定程度的隐私,正确过滤的项目已经模糊):
这是我已有的代码:
<script>
(function( $ ){
function getHashFilter() {
var hash = location.hash;
// get filter=filterName
var matches = location.hash.match( /filter=([^&]+)/i );
var hashFilter = matches && matches[1];
return hashFilter && decodeURIComponent( hashFilter );
}
$( function() {
var $container = $('.blogGrid');
// bind filter button click
var $filters = $('.filter-button-group').on( 'click', 'button', function() {
var filterAttr = $( this ).attr('data-filter');
// set filter in hash
location.hash = 'filter=' + encodeURIComponent( filterAttr );
});
var isIsotopeInit = false;
function onHashchange() {
var hashFilter = getHashFilter();
if ( !hashFilter && isIsotopeInit ) {
return;
}
isIsotopeInit = true;
// filter isotope
$container.isotope({
itemSelector: '.blogItem',
percentPosition: true,
layoutMode: 'fitRows',
filter: hashFilter
});
// set selected class on button
if ( hashFilter ) {
$filters.find('.is-checked').removeClass('is-checked');
$filters.find('[data-filter="' + hashFilter + '"]').addClass('is-checked');
}
}
$(window).on( 'hashchange', onHashchange );
// trigger event handler to init Isotope
onHashchange();
});
})( jQuery );
</script>
我在 Joomla 中,所以我也可以通过用户会话发送变量 - 但我看不到可以那样工作的 Isotope 方法?
事实证明过滤是在布局完成之前发生的,所以没有过滤项目的最终排列。
我刚刚添加了
$(document).ready(function(){
$container.isotope();
});
到脚本底部以在文档加载完成后触发重新排列。
看来已经解决了。
我遇到了 Isotope 问题,我已切换到 URL 哈希过滤方法,因为我需要能够将访问者发送到已启用过滤器的页面。
当我正常使用过滤器时 - 即页面加载未过滤并且单击按钮激活过滤器时,一切都按预期工作。
当从另一个带有 URL 中的散列的页面到达时,它确实激活了过滤,但它没有正确隐藏剩余的项目 - 相反,它们都聚集在 0,0 绝对并且没有隐藏。只有过滤后的项目布局正确,就像这样(为了一定程度的隐私,正确过滤的项目已经模糊):
这是我已有的代码:
<script>
(function( $ ){
function getHashFilter() {
var hash = location.hash;
// get filter=filterName
var matches = location.hash.match( /filter=([^&]+)/i );
var hashFilter = matches && matches[1];
return hashFilter && decodeURIComponent( hashFilter );
}
$( function() {
var $container = $('.blogGrid');
// bind filter button click
var $filters = $('.filter-button-group').on( 'click', 'button', function() {
var filterAttr = $( this ).attr('data-filter');
// set filter in hash
location.hash = 'filter=' + encodeURIComponent( filterAttr );
});
var isIsotopeInit = false;
function onHashchange() {
var hashFilter = getHashFilter();
if ( !hashFilter && isIsotopeInit ) {
return;
}
isIsotopeInit = true;
// filter isotope
$container.isotope({
itemSelector: '.blogItem',
percentPosition: true,
layoutMode: 'fitRows',
filter: hashFilter
});
// set selected class on button
if ( hashFilter ) {
$filters.find('.is-checked').removeClass('is-checked');
$filters.find('[data-filter="' + hashFilter + '"]').addClass('is-checked');
}
}
$(window).on( 'hashchange', onHashchange );
// trigger event handler to init Isotope
onHashchange();
});
})( jQuery );
</script>
我在 Joomla 中,所以我也可以通过用户会话发送变量 - 但我看不到可以那样工作的 Isotope 方法?
事实证明过滤是在布局完成之前发生的,所以没有过滤项目的最终排列。
我刚刚添加了
$(document).ready(function(){
$container.isotope();
});
到脚本底部以在文档加载完成后触发重新排列。
看来已经解决了。