...

Как импортировать любую внешнюю библиотеку js на форму

Тема в разделе "Скрипты и разработка", создана пользователем makrauz.sb, 26 янв 2024.

  1. makrauz.sb

    makrauz.sb Новичок

    Задача.
    Мне понадобилось использовать внешнюю библиотеку https://www.amcharts.com/demos/column-with-rotated-series/.
    Если прописать <script src="https://cdn.amcharts.com/lib/5/index.js"> в коде блока, то он не исполнится, так как блок кода не дожидается загрузки библиотек и выдаст ошибку.
    Что делаем.
    Импортируем jquery файл и аттачим его к сценарию.Описание можно почитать здесь.
    https://community.elma365.com/ru/threads/2133/
    Код:
    
    import $ from "jquery-3.6.0.min.js";
    
    
    Далее вешаем на онлоад наши библиотеки
    Код:
    
    async function onLoad(): Promise<void> {
        $(
    "head").append($("<script></script>").attr("src", 'https://cdn.amcharts.com/lib/5/index.js'));
        $(
    "head").append($("<script></script>").attr("src", 'https://cdn.amcharts.com/lib/5/xy.js'));
        $(
    "head").append($("<script></script>").attr("src", 'https://cdn.amcharts.com/lib/5/themes/Animated.js'));
    }
    Потом на странице вставляем код и наслаждаемся результатом
    Код:
    
    <style>
    #chartdiv {
      
    width: 100%;
      
    height: 500px;
    }
    </
    style>
    <
    script>
    am5.ready(function() {

    // Create root element
    // https://www.amcharts.com/docs/v5/getting-started/#Root_element
    var root = am5.Root.new("chartdiv");

    // Set themes
    // https://www.amcharts.com/docs/v5/concepts/themes/
    root.setThemes([
      
    am5themes_Animated.new(root)
    ]);

    // Create chart
    // https://www.amcharts.com/docs/v5/charts/xy-chart/
    var chart = root.container.children.push(am5xy.XYChart.new(root, {
      
    panX: true,
      
    panY: true,
      
    wheelX: "panX",
      
    wheelY: "zoomX",
      
    pinchZoomX: true,
      
    paddingLeft:0,
      
    paddingRight:1
    }));

    // Add cursor
    // https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/
    var cursor = chart.set("cursor", am5xy.XYCursor.new(root, {}));
    cursor.lineY.set("visible", false);


    // Create axes
    // https://www.amcharts.com/docs/v5/charts/xy-chart/axes/
    var xRenderer = am5xy.AxisRendererX.new(root, {
      
    minGridDistance: 30,
      
    minorGridEnabled: true
    });

    xRenderer.labels.template.setAll({
      
    rotation: -90,
      
    centerY: am5.p50,
      
    centerX: am5.p100,
      
    paddingRight: 15
    });

    xRenderer.grid.template.setAll({
      
    location: 1
    })

    var 
    xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, {
      
    maxDeviation: 0.3,
      
    categoryField: "country",
      
    renderer: xRenderer,
      
    tooltip: am5.Tooltip.new(root, {})
    }));

    var 
    yRenderer = am5xy.AxisRendererY.new(root, {
      
    strokeOpacity: 0.1
    })

    var 
    yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
      
    maxDeviation: 0.3,
      
    renderer: yRenderer
    }));

    // Create series
    // https://www.amcharts.com/docs/v5/charts/xy-chart/series/
    var series = chart.series.push(am5xy.ColumnSeries.new(root, {
      
    name: "Series 1",
      
    xAxis: xAxis,
      
    yAxis: yAxis,
      
    valueYField: "value",
      
    sequencedInterpolation: true,
      
    categoryXField: "country",
      
    tooltip: am5.Tooltip.new(root, {
        
    labelText: "{valueY}"
      
    })
    }));

    series.columns.template.setAll({ cornerRadiusTL: 5, cornerRadiusTR: 5, strokeOpacity: 0 });
    series.columns.template.adapters.add("fill", function (fill, target) {
      return 
    chart.get("colors").getIndex(series.columns.indexOf(target));
    });

    series.columns.template.adapters.add("stroke", function (stroke, target) {
      return 
    chart.get("colors").getIndex(series.columns.indexOf(target));
    });


    // Set data
    var data = [{
      
    country: "USA",
      
    value: 2025
    }, {
      
    country: "China",
      
    value: 1882
    }, {
      
    country: "Japan",
      
    value: 1809
    }, {
      
    country: "Germany",
      
    value: 1322
    }, {
      
    country: "UK",
      
    value: 1122
    }, {
      
    country: "France",
      
    value: 1114
    }, {
      
    country: "India",
      
    value: 984
    }, {
      
    country: "Spain",
      
    value: 711
    }, {
      
    country: "Netherlands",
      
    value: 665
    }, {
      
    country: "South Korea",
      
    value: 443
    }, {
      
    country: "Canada",
      
    value: 441
    }];

    xAxis.data.setAll(data);
    series.data.setAll(data);


    // Make stuff animate on load
    // https://www.amcharts.com/docs/v5/concepts/animations/
    series.appear(1000);
    chart.appear(1000, 100);

    }); 
    // end am5.ready()
    </script>


    <div id="chartdiv"></div>
    [​IMG]
    Последнее редактирование: 26 янв 2024
  2. makrauz.sb

    makrauz.sb Новичок

    В группе телеграмм Elma365 community у Антона Александрова получился более красивый вариант не требующий манипуляций с jquery.


    Код:
    
        $(function() {
            
    // Загрузка внешних скриптов
            
    const loadScript = url => new Promise(resolve => {
                const 
    script = document.createElement('script')
                
    script.addEventListener('load', () => {
                    
    resolve()
                })
                
    script.src = url
                document
    .body.append(script)
            })

            const 
    srcIndex = loadScript('https://cdn.amcharts.com/lib/5/index.js')
            const 
    srcXY = loadScript('https://cdn.amcharts.com/lib/5/xy.js')
            const 
    srcAm = loadScript('https://cdn.amcharts.com/lib/5/themes/Animated.js')

            
    Promise.all([srcIndex, srcXY, srcAm])
                .
    then(([srcIndex, srcXY, srcAm]) => {
                    
    console.log('Скрипт index.js загружен')
                    
    console.log('Скрипт xy.js загружен')
                    
    console.log('Скрипт Animated.js загружен')
                    
    amLoadScript()
                })

            function 
    amLoadScript() {
               
    //
            
    }
        });
    Последнее редактирование: 26 янв 2024