我将页面分成可通过锚点访问的部分。 有没有办法让highcharts动画在其特定部分变为可见而不是在页面加载时触发?
http://jsfiddle.net/YFMSb/2/(图表位于“技能”下,因此希望在页面的该部分显示时进行初始动画。在后续访问/通过该部分时无需重新制作动画)
$(function () {
$('#container').highcharts({
chart: {
type: 'bar',
spacingTop: 0
},
title: {
text: ''
},
xAxis: {
labels: {
enabled: false
}
},
yAxis: {
min: 0,
max: 100,
title: {
text: ''
},
labels: {
enabled: false
}
},
plotOptions: {
series: {
stacking: 'normal'
}
},
tooltip: {
formatter: function() {
return '<b>'+ this.series.name +'</b>';
}
},
series: [{
name: 'clean',
data: [10],
}, {
name: 'eat',
data: [10]
}, {
name: 'sleep',
data: [40]
}, {
name: 'work',
data: [30]
}, {
name: 'play',
data: [10]
}]
});
});
答案 0 :(得分:8)
将滚动事件侦听器附加到窗口,该窗口会检测您何时接近skills
部分。创建图表时,请删除滚动侦听器以确保仅创建一次图表。这也有助于提高表现:没有理由倾听我们不再回应的事件。
如果用户点击顶部的skills
链接,此方法也有效。
您希望小心滚动事件,因为它可能是一个真正的性能瓶颈。我采用了John Resig建议的approach来定期检查滚动位置。
<强> Working Demo 强>
$(function () {
var $window = $(window),
didScroll = false,
skillsTop = $('#skills').offset().top - 40; //the point at which we will create the chart
$window.on('scroll', function () {
//detected a scroll event, you want to minimize the code here because this event can be thrown A LOT!
didScroll = true;
});
//check every 250ms if user has scrolled to the skills section
setInterval(function () {
if (didScroll) {
didScroll = false;
if ($window.scrollTop() >= skillsTop) {
createChart();
}
}
}, 250);
function createChart() {
$window.off('scroll'); //remove listener that will create chart, this ensures the chart will be created only once
$('#container').highcharts({
//chart configuration here
});
};
});
答案 1 :(得分:2)
我假设“部分变得可见”你的意思是滚动事件。
这是使其成功的最基本代码:
var target = $('#container');
var targetHeight = target.get(0).offsetTop;
var printed = false;
var printChart = function(){
if(printed) return;
printed = true;
target.highcharts({
chart: type: 'bar',
/* all chart code */
});
};
$('[href="#skills"]').on('click', printChart);
$(window).on('scroll',function(e){
var st = $(window).scrollTop();
if(st > targetHeight) printChart();
});
答案 2 :(得分:0)
您必须点击“技能”创建图表。 jsfiddle下面。 http://jsfiddle.net/YFMSb/6/
$("#your skills link").click(function(){
createChart();
});
createChart()基本上定义了你的图表。