我正在使用以jQuery Cycle为核心的 jQuery maximage来浏览幻灯片,并在每次转换时修改(替换)位置哈希。
它有效,除非您尝试导航太快;此时浏览器(在 Firefox 和 Chrome 中测试)将崩溃,因为页面会无休止地尝试重新加载自身。
$(function(){
var h,
hash = window.location.hash,
hashes = {},
index = 0;
// Iterate slides into hashes object
$('#slides').children('div').each(function(i) {
h = $(this).attr('id');
// Change IDs to hash format
h = h.replace(/\ /g, '-');
hashes[h] = i;
slideInteger = i
});
if (hash) {
index = hashes[hash.substring(1)] || index;
};
$('#slides').maximage({
cycleOptions: {
startingSlide: index,
cssTransitions: true,
after: onAfter,
fx: 'fade',
speed: 360,
timeout: 0
},
onFirstImageLoaded: function(){
$('#cycle-loader').hide();
// Remove tooltip on hover
$('.mc-image').hover(function(){
$(this).removeAttr('title');
});
}
});
function onAfter(el, next_el, opts) {
var nextHash = $(next_el).find('.slideLink').text().toLowerCase().replace(/\ /g, '-');
window.location.replace(('' + window.location).split('#')[0] + '#' + nextHash);
};
$(window).on("hashchange", function() {
$('#slides').cycle(hashes[window.location.hash.substring(1)] || 0);
});
});
我尝试将 onAfter 函数替换为...
function onAfter(el, next_el, opts) {
var nextHash = $(next_el).find('.slideLink').text().toLowerCase().replace(/\ /g, '-');
if( window.location.hash != ('#' + nextHash) ){
window.location.replace(('' + window.location).split('#')[0] + '#' + nextHash);
}
};
......但它似乎没有任何区别。
这似乎也不是我可以在 jsfiddle 中复制的东西——因此对缺乏物理演示表示歉意。