我的一些网页包含多个文本元素,这些元素使用jQuery“accordion”效果进行扩展和折叠:
function show_panel(num) {
jQuery('div.panel').hide();
jQuery('#a' + num).slideToggle("slow");
}
function hide_panel(num) {
jQuery('div.panel').show();
jQuery('#a' + num).slideToggle("slow");
}
这会导致窗口大小发生变化,因此必须重新初始化jScrollPane,这也会改变滚动条的长度。为了实现滚动条的平滑长度调整,我将“autoReinitialise”选项设置为“true”,将“autoReinitialiseDelay”设置为“40”ms:
$(document).ready(function () {
var win = $(window);
// Full body scroll
var isResizing = false;
win.bind(
'resize',
function () {
if (!isResizing) {
isResizing = true;
var container = $('#content');
// Temporarily make the container tiny so it doesn't influence the
// calculation of the size of the document
container.css({
'width': 1,
'height': 1
});
// Now make it the size of the window...
container.css({
'width': win.width(),
'height': win.height()
});
isResizing = false;
container.jScrollPane({
showArrows: false,
autoReinitialise: true,
autoReinitialiseDelay: 40
});
}
}).trigger('resize');
// Workaround for known Opera issue which breaks demo (see
// http://jscrollpane.kelvinluck.com/known_issues.html#opera-scrollbar )
$('body').css('overflow', 'hidden');
// IE calculates the width incorrectly first time round (it
// doesn't count the space used by the native scrollbar) so
// we re-trigger if necessary.
if ($('#content').width() != win.width()) {
win.trigger('resize');
}
});
效果还可以,但是由于CPU使用率非常高而导致我的粉丝疯狂。
这是一个显示设置和效果的jsfiddle:http://jsfiddle.net/VVxVz/
以下是一个示例页面(实际上它是显示的网页中的iframe):http://www.sicily-cottage.net/zagaraenausfluege.htm
是否有可能在不使用“autoReinitialise”选项的情况下实现滚动条长度的相同“平滑”转换,可能还有一个额外的脚本,jscrollpane.js的一些修改,或者只是滚动条的css动画和然后手动调用重新初始化?
我在javascript上绝对没用,所以任何帮助都会非常感激。
答案 0 :(得分:0)
每次调整窗口大小时,都无需在内容上初始化jScrollPane。你应该只在$(document).ready()
上做一次。此外,如果您的内容是staic,则无需使用autoReinitialize。只有在您滑动其中一个容器或window.resize
上滑动时,才应重新初始化jScrollPane以更新滚动条大小。所以,code变得越来越美丽了:)
function togglePanel(num) {
var jsp = $('#content').data('jsp');
jQuery('#a' + num).slideToggle({
"duration": "slow",
"step": function(){
jsp.reinitialise();
}
});
return false;
}
$(document).ready(function () {
var container = $('#content').jScrollPane({
showArrows: false,
autoReinitialise: false
});
var jsp = container.data('jsp');
$(window).on('resize', function(){
jsp.reinitialise();
});
// Workaround for known Opera issue which breaks demo (see
// http://jscrollpane.kelvinluck.com/known_issues.html#opera-scrollbar )
$('body').css('overflow', 'hidden');
// IE calculates the width incorrectly first time round (it
// doesn't count the space used by the native scrollbar) so
// we re-trigger if necessary.
if (container.width() != $(window).width()) {
jsp.reinitialise();
}
});