nickola105
@nickola105
начинающий

Как вы организовываете свой код в проектах?

Ребятушки, написал кучу функций, но они не везде работаю правильно и валят весь js
что я имею ввиду когда говорю не везде правильно?
ну т.е. переходишь на другую страницу функция не находит в ней искомый элемент в результате чего "падает"
адекватно работает только функция отправки формы, у нее немного по иному устроена инициализация
вот сам код
(function() {

    var width = 320;    // We will scale the photo width to this
    var height = 0;     // This will be computed based on the input stream

    var streaming = false;

    var video = null;
    var canvas = null;
    var photo = null;
    var startbutton = null;
    var picture = null;
    var useWebcam = document.querySelector('#use-webcam');
    var uploadWrap = document.querySelector('.upload-wrap');
    var applyphoto = document.querySelector('#applytbutton');
    
	function startup() {
        video = document.getElementById('video');
        canvas = document.getElementById('canvas');
        photo = document.getElementById('photo');
        startbutton = document.getElementById('startbutton');
        uploadWrap.style.display = "none";

        navigator.getMedia = ( navigator.getUserMedia ||
        navigator.webkitGetUserMedia ||
        navigator.mozGetUserMedia ||
        navigator.msGetUserMedia);

        navigator.getMedia(
            {
                video: true,
                audio: false
            },
            function(stream) {
                if (navigator.mozGetUserMedia) {
                    video.mozSrcObject = stream;
                } else {
                    var vendorURL = window.URL || window.webkitURL;
                    video.src = vendorURL.createObjectURL(stream);
                }
                video.play();
            },
            function(err) {
                console.log("An error occured! " + err);
            }
        );

        video.addEventListener('canplay', function(ev){
            if (!streaming) {
                height = video.videoHeight / (video.videoWidth/width);

                if (isNaN(height)) {
                    height = width / (4/3);
                }

                video.setAttribute('width', width);
                video.setAttribute('height', height);
                canvas.setAttribute('width', width);
                canvas.setAttribute('height', height);
                streaming = true;
            }
        }, false);

        startbutton.addEventListener('click', function(ev){
            takepicture();
            ev.preventDefault();
        }, false);

        clearphoto();
    }

    function clearphoto() {
        var context = canvas.getContext('2d');
        context.fillStyle = "#AAA";
        context.fillRect(0, 0, canvas.width, canvas.height);

        var data = canvas.toDataURL('image/png');
        photo.setAttribute('src', data);
    }

    function takepicture() {
        var context = canvas.getContext('2d');
        if (width && height) {
            canvas.width = width;
            canvas.height = height;
            context.drawImage(video, 0, 0, width, height);

            var data = canvas.toDataURL('image/png');
            photo.setAttribute('src', data);
            picture = data.split(',')[1];
            photo.style.display = 'block';

        } else {
            clearphoto();
        }
    }

    function savePhoto() {
            var utf8 = atob(picture),
                array = [];
            //---
            for(var i = 0; i < utf8.length; i++)
                array.push(utf8.charCodeAt(i));
            var myBlob = new Blob([new Uint8Array(array)], {type: 'image/png'});
            var file = new File([myBlob], 'user-photo')
            return(file);
    }
    applyphoto.addEventListener('click', savephoto, false);
    useWebcam.addEventListener('click', startup, false)
    Set up our event listener to run the startup process
    once loading is complete.
    window.addEventListener('load', startup, false);
}());
(function dragDropLoad() {
    var dropbox;
    dropbox = document.querySelector('#dropbox');

    dropbox.addEventListener('dragenter', dragenter, false);
    dropbox.addEventListener('dragover', dragover, false);
    dropbox.addEventListener('drop', drop, false);

    function dragenter(e) {
        e.stopPropagation();
        e.preventDefault();
    }

    function dragover(e) {
        e.stopPropagation();
        e.preventDefault();
    }

    function  drop(e) {
        e.stopPropagation();
        e.preventDefault();

        var dt = e.dataTransfer;
        var file = dt.files[0];
    if (file)
        createimage(file);

    function createimage(file) {
        var imgUser = document.querySelector('.output img');
        var uploadWrap = document.querySelector('.upload-wrap');
        console.log(imgUser, file);
        uploadWrap.style.display = 'none';
        imgUser.style.display = 'block';
        imgUser.src = window.URL.createObjectURL(file);
        imgUser.onload = function() {
            window.URL.revokeObjectURL(this.src);

        }
    }

        handleFiles(files);
    }
}());

(function inputFile() {
    var picture;
    var input = document.querySelector('#uploadImage');
    input.addEventListener('change', handleFiles, false);
    function handleFiles() {
        picture = this.files[0];
    }
})();


(function () {
    
  var form = function(option) {
      
        var initCalled = false;
        var elsForm = document.querySelector(option.name);
    
        var init = function() {
            if (!initCalled) {
                initCalled = true;
                handleSubmit(elsForm);
            }
        };

        function toJSONString( form ) {
		    var obj = {};
            var elements = form.querySelectorAll( "input, select, textarea" );
        
		    for( var i = 0; i < elements.length; ++i ) {
			    var element = elements[i];
			    var name = element.name;
			    var value = element.value;   
			    if( name ) {
                    if (element.type === "radio" && element.checked){
                        obj[ name ] = value;
                    } else if (element.type !== "radio") {        
                        obj[ name ] = value;
                    }
			    }
		    }          
		    return JSON.stringify( obj );
	    }

        var handleSubmit = function(elsForm) {
            elsForm.addEventListener("submit", function( e ) {
                e.preventDefault();
			    var json = toJSONString( this );
                sendForm(json);    
		    }, false)
        };

        function sendForm(data) {
            
            var uri = "site/register";
            var xhr = new XMLHttpRequest();
            var fd = new FormData();

            xhr.open("POST", uri, true);
            xhr.onreadystatechange = function() {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    alert(xhr.responseText);
                }
            };
            fd.append('myFile', data);
            
            xhr.send(fd);
        };
  
        return {
            init: init,
            sendForm: sendForm
        };
}
    window.form = form;
})();

Посоветуйте как его организовать правильно? Может почитать чего?
  • Вопрос задан
  • 268 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы