4

アンカーを介してアクセスされるセクションに分割されたページがあります。ページの読み込み時ではなく、特定のセクションが表示されたときにハイチャート アニメーションを起動する方法はありますか?

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]
        }]

    });
});
4

3 に答える 3

8

セクションに近づいたことを検出するスクロール イベント リスナーをウィンドウにアタッチしますskills。グラフを作成するときは、スクロール リスナーを削除して、グラフが 1 回だけ作成されるようにします。これはパフォーマンスにも役立ちます。もう応答しないイベントをリッスンする理由はありません。

このアプローチは、ユーザーがskills上部のリンクをクリックした場合にも機能します。

スクロール イベントは実際のパフォーマンスのボトルネックになる可能性があるため、注意が必要です。John Resig が提案した方法で、スクロール位置を定期的にチェックしました。

ワーキングデモ

$(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
        });
    };
});
于 2013-08-21T20:00:00.230 に答える
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();
});

http://jsfiddle.net/YFMSb/12/

于 2013-08-21T18:03:41.577 に答える
0

「スキル」をクリックしてチャートを作成する必要があります。以下のjsfiddle。 http://jsfiddle.net/YFMSb/6/

$("#your skills link").click(function(){
         createChart();  
    });

createChart() は基本的にチャートを定義します。

于 2013-08-21T18:00:27.567 に答える