Available in the Full Version

Financial Chart - Callouts Layer

This sample demonstrates using the Callouts Layer with the Financial Chart control.

This sample is designed for a larger screen size.

On mobile, try rotating your screen, view full size, or email to another device.

Code View

Copy to Clipboard
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>

    <!-- Ignite UI for jQuery Required Combined CSS Files -->
    <link href="http://cdn-na.infragistics.com/igniteui/2024.2/latest/css/themes/infragistics/infragistics.theme.css" rel="stylesheet" />
    <link href="http://cdn-na.infragistics.com/igniteui/2024.2/latest/css/structure/infragistics.css" rel="stylesheet" />

    <link href="http://cdn-na.infragistics.com/igniteui/2024.2/latest/css/structure/modules/infragistics.ui.chart.css" rel="stylesheet" />
    <link href="http://cdn-na.infragistics.com/igniteui/2024.2/latest/css/structure/modules/infragistics.ui.financialchart.css" rel="stylesheet" />

    <script src="http://ajax.aspnetcdn.com/ajax/modernizr/modernizr-2.8.3.js"></script>
    <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    <script src="http://code.jquery.com/ui/1.11.1/jquery-ui.min.js"></script>

    <!-- Ignite UI for jQuery Required Combined JavaScript Files -->
    <script src="http://cdn-na.infragistics.com/igniteui/2024.2/latest/js/infragistics.core.js"></script>
    <script src="http://cdn-na.infragistics.com/igniteui/2024.2/latest/js/infragistics.dv.js"></script>


    <script src="/data-files/Data.js" type="text/javascript"></script>

</head>
<body>

    <div id="chart" style="width:95%;height:500px"></div>

    <script>

        $(function () {
        
            function CalloutItem(index, value, content) {
                this.index = index;
                this.value = value;
                this.content = content;
            }

            var data = PriceData.AMZN();
            var calloutData = [];
            
            function generateCalloutData() {
                var intervalSplit = Math.floor(Math.random() * 300) + 280;
                var intervalDiv = Math.floor(Math.random() * 400) + 360;
                var index = 0;
                var priceLowest = new CalloutItem(index, Number.MAX_SAFE_INTEGER, "MIN PRICE");
                var priceHighest = new CalloutItem(index, Number.MIN_SAFE_INTEGER, "MAX PRICE");
                calloutData.push(priceLowest);
                calloutData.push(priceHighest);

                for (var item of data) {// finding item with lowest price
                    if (priceLowest.value > item.close)
                    {
                        priceLowest.value = item.close;
                        priceLowest.index = index;
                    }
                    // finding item with highest price
                    if (priceHighest.value < item.close)
                    {
                        priceHighest.value = item.close;
                        priceHighest.index = index;
                    }
                    
                    // creating SPLIT/DIVIDEND events at specific intervals
                    if (index % intervalSplit === 5)
                    {
                        var stockEvent = new CalloutItem(index, item.close, "SPLIT");
                        calloutData.push(stockEvent);
                    }
                    else if (index % intervalDiv === 5)
                    {
                        var stockEvent = new CalloutItem(index, item.close, "DIV");
                        calloutData.push(stockEvent);
                    }
                    
                    ++index;
                }
            }
            
            generateCalloutData();

            $("#chart").igFinancialChart({
                dataSource: data,

                calloutsVisible: true,
                calloutsItemsSource: calloutData,
                calloutsXMemberPath: "index",
                calloutsYMemberPath: "value",
                calloutsLabelMemberPath: "content",
                calloutsContentMemberPath: "content"
            });

        });
    </script>

</body>
</html>