Внешние библиотеки Javascript (cdnjs), недоступные для HTML-кода

Я пытался добавить html и javascript на свой веб-сайт, чтобы пользователи могли рисовать некоторые фигуры. Я нашел действительно хороший образец для работы с JS-скрипт. Когда я запускаю код на JSFiddle, он работает отлично, но когда я сам запускал его в своем браузере (я пробовал Edge, Firefox и Chrome), он не работал. Когда я запустил его сам, я включил все скрипты и css в один html-файл, потому что это единственный способ добавить его на мой сайт Wix. Скрипты (локальный javascript и внешние библиотеки cdn) находятся вместе в разделе body html. Все учебники, которые я нашел, говорят о том, что можно использовать библиотеки CDN. Я уверен, что моя проблема как-то связана с подключением к библиотекам CDN, так как мне это исправить?

Вот код:

    var roof = null;
    var roofPoints = [];
    var lines = [];
    var lineCounter = 0;
    var drawingObject = {};
    drawingObject.type = "";
    drawingObject.background = "";
    drawingObject.border = "";

    function Point(x, y) {
        this.x = x;
        this.y = y;
    }
    

    $("#poly").click(function () {
        if (drawingObject.type == "roof") {
            drawingObject.type = "";
            lines.forEach(function(value, index, ar){
                 canvas.remove(value);
            });
            //canvas.remove(lines[lineCounter - 1]);
            roof = makeRoof(roofPoints);
            canvas.add(roof);
            canvas.renderAll();
        } else {
            drawingObject.type = "roof"; // roof type
        }
    });


    // canvas Drawing
var canvas = new fabric.Canvas('canvas-tools');
    var x = 0;
    var y = 0;
    
    fabric.util.addListener(window,'dblclick', function(){ 
            drawingObject.type = "";
            lines.forEach(function(value, index, ar){
                 canvas.remove(value);
            });
            //canvas.remove(lines[lineCounter - 1]);
            roof = makeRoof(roofPoints);
            canvas.add(roof);
            canvas.renderAll();
      
        console.info("double click");
        //clear arrays
         roofPoints = [];
         lines = [];
         lineCounter = 0;
        
    });

    canvas.on('mouse:down', function (options) {
        if (drawingObject.type == "roof") {
            canvas.selection = false;
            setStartingPoint(options); // set x,y
            roofPoints.push(new Point(x, y));
            var points = [x, y, x, y];
            lines.push(new fabric.Line(points, {
                strokeWidth: 3,
                selectable: false,
                stroke: 'red'
            }).setOriginX(x).setOriginY(y));
            canvas.add(lines[lineCounter]);
            lineCounter++;
            canvas.on('mouse:up', function (options) {
                canvas.selection = true;
            });
        }
    });
    canvas.on('mouse:move', function (options) {
        if (lines[0] !== null && lines[0] !== undefined && drawingObject.type == "roof") {
            setStartingPoint(options);
            lines[lineCounter - 1].set({
                x2: x,
                y2: y
            });
            canvas.renderAll();
        }
    });

    function setStartingPoint(options) {
        var offset = $('#canvas-tools').offset();
        x = options.e.pageX - offset.left;
        y = options.e.pageY - offset.top;
    }

    function makeRoof(roofPoints) {

        var left = findLeftPaddingForRoof(roofPoints);
        var top = findTopPaddingForRoof(roofPoints);
        roofPoints.push(new Point(roofPoints[0].x,roofPoints[0].y))
        var roof = new fabric.Polyline(roofPoints, {
        fill: 'rgba(0,0,0,0)',
        stroke:'#58c'
        });
        roof.set({
            
            left: left,
            top: top,
           
        });


        return roof;
    }

    function findTopPaddingForRoof(roofPoints) {
        var result = 999999;
        for (var f = 0; f < lineCounter; f++) {
            if (roofPoints[f].y < result) {
                result = roofPoints[f].y;
            }
        }
        return Math.abs(result);
    }

    function findLeftPaddingForRoof(roofPoints) {
        var result = 999999;
        for (var i = 0; i < lineCounter; i++) {
            if (roofPoints[i].x < result) {
                result = roofPoints[i].x;
            }
        }
        return Math.abs(result);
    }
.canvas {
    border: 1px solid black;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.4.0/fabric.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<button id = "poly"  title = "Draw Polygon" ">Draw Polygon </button>


<label style = "color:blue"><b>Press double click to close shape and stop</b></label>
<canvas id = "canvas-tools" class = "canvas" width = "500" height = "500"></canvas>

РЕДАКТИРОВАТЬ

Итак, в html-файле я помещаю все в тег body. Библиотеки также включены перед javascript. Я получаю сообщение об ошибке «Невозможно получить свойство «x» неопределенной или нулевой ссылки», когда я дважды щелкаю, чтобы закрыть фигуру. Я уверен, потому что точки не добавляются, когда я нажимаю на холст

Где javascript по отношению к html?

JayBee 24.05.2019 20:35

Вы должны включить библиотеки перед скриптом. Кроме того, я не могу сказать, что вызывает ошибку, если вы не поделитесь, что это за ошибка...

Heretic Monkey 24.05.2019 20:35

Итак, в html-файле я помещаю все в тег <body></body>. Библиотеки также включены перед javascript. Я получаю сообщение об ошибке «Невозможно получить свойство «x» неопределенной или нулевой ссылки», когда я дважды щелкаю, чтобы закрыть фигуру. Я уверен, потому что точки не добавляются, когда я нажимаю на холст

InigoMontoyaJr 24.05.2019 20:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
3
261
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Wix не разрешает использовать Cloudflare. По следующей ссылке есть более подробная информация.

https://support.wix.com/en/article/request-cloudflare-support

Wix имеет ограниченный API для работы с элементами HTML. https://support.wix.com/en/article/corvid-working-with-the-html-элемент

если вы хотите запустить его на отдельной странице (не на wix) и загружены скрипты, попробуйте обернуть код javascript в:

<script>
$(function() { 
     //your code here 
     var roof = null;
     var roofPoints = [];
     var lines = [];
     var lineCounter = 0;
     var drawingObject = {};
     ...
     ...

});
</script>

Это имеет смысл, но библиотеки даже не работали, когда я запускал html-файл сам по себе, а не на своем веб-сайте Wix.

InigoMontoyaJr 24.05.2019 21:09

если вы хотите запустить его на отдельной странице (не на wix) и загружены скрипты, попробуйте обернуть код javascript в: $(function() { // ваш код здесь });

Bradia 24.05.2019 21:30

Это работает как шарм, спасибо. Я также попробовал это на Wix, и это сработало.

InigoMontoyaJr 24.05.2019 21:46

Другие вопросы по теме