...

Как импортировать любую внешнюю библиотеку 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 {
      
    width100%;
      
    height500px;
    }
    </
    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, {
      
    panXtrue,
      
    panYtrue,
      
    wheelX"panX",
      
    wheelY"zoomX",
      
    pinchZoomXtrue,
      
    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, {
      
    minGridDistance30,
      
    minorGridEnabledtrue
    });

    xRenderer.labels.template.setAll({
      
    rotation: -90,
      
    centerYam5.p50,
      
    centerXam5.p100,
      
    paddingRight15
    });

    xRenderer.grid.template.setAll({
      
    location1
    })

    var 
    xAxis chart.xAxes.push(am5xy.CategoryAxis.new(root, {
      
    maxDeviation0.3,
      
    categoryField"country",
      
    rendererxRenderer,
      
    tooltipam5.Tooltip.new(root, {})
    }));

    var 
    yRenderer am5xy.AxisRendererY.new(root, {
      
    strokeOpacity0.1
    })

    var 
    yAxis chart.yAxes.push(am5xy.ValueAxis.new(root, {
      
    maxDeviation0.3,
      
    rendereryRenderer
    }));

    // Create series
    // https://www.amcharts.com/docs/v5/charts/xy-chart/series/
    var series chart.series.push(am5xy.ColumnSeries.new(root, {
      
    name"Series 1",
      
    xAxisxAxis,
      
    yAxisyAxis,
      
    valueYField"value",
      
    sequencedInterpolationtrue,
      
    categoryXField"country",
      
    tooltipam5.Tooltip.new(root, {
        
    labelText"{valueY}"
      
    })
    }));

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

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


    // Set data
    var data = [{
      
    country"USA",
      
    value2025
    }, {
      
    country"China",
      
    value1882
    }, {
      
    country"Japan",
      
    value1809
    }, {
      
    country"Germany",
      
    value1322
    }, {
      
    country"UK",
      
    value1122
    }, {
      
    country"France",
      
    value1114
    }, {
      
    country"India",
      
    value984
    }, {
      
    country"Spain",
      
    value711
    }, {
      
    country"Netherlands",
      
    value665
    }, {
      
    country"South Korea",
      
    value443
    }, {
      
    country"Canada",
      
    value441
    }];

    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(1000100);

    }); 
    // 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([srcIndexsrcXYsrcAm])
                .
    then(([srcIndexsrcXYsrcAm]) => {
                    
    console.log('Скрипт index.js загружен')
                    
    console.log('Скрипт xy.js загружен')
                    
    console.log('Скрипт Animated.js загружен')
                    
    amLoadScript()
                })

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