Добрый день! Написал часть небольшой программы на JS, работает в принципе как надо, но вот вопрос, а правильно ли я пишу в ООП стиле на JS? Так как раньше писал на других языках.
//объект хранящий информацию о картинке
/*var Img = function (src, width, height) {
var _src = src;
var _width = width;
var _height = height;
this.getSrc = function () {
return _src;
}
this.getWidth = function () {
return _width;
}
this.getHeight = function () {
return _height;
}
}*/
function Powell(startX, startY, eps, strFunc, idPlot, idConsole, betweenX_1, betweenX_2, betweenY_1, betweenY_2, idPlot3D, idExpression) {
console.log("startX = " + startX + " startY = " + startY + " eps = " + eps + " strFunc = " + strFunc + " idPlot = " + idPlot +
" idConsole = " + idConsole + " betweenX_1 = " + betweenX_1 + " betweenX_2 = " + betweenX_2 + " betweenY_1 = " + betweenY_1 +
"betweenY_2 = " + betweenY_2 + "idPlot3D = " + idPlot3D + " idExpression = " + idExpression);
// ф-ция запрос на сервер за картинкой и размерами
var objResponse;
var contextCanvas;
var loadOk = 0;
function makeRequest() {
var processingResponse = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
// responseJson - хранится JSON
var responseJson = xmlHttp.responseText;
console.log("State is 4 and 200");
console.log(responseJson);
objResponse = JSON.parse(responseJson);
} else if(xmlHttp.readyState == 4 && xmlHttp.status != 200){
console.log("Error - not internet!!!");
// в случае сетевой ошибки
// ставим картинку по умолчанию
}
}
//формируем строку запроса
var strRequest;
strRequest = "strFunc=" + encodeURIComponent(strFunc) + "&betweenX_1=" + encodeURIComponent(betweenX_1) + "&betweenX_2=" + encodeURIComponent(betweenX_2) +
"&betweenY_1=" + encodeURIComponent(betweenY_1) + "&betweenY_2=" + encodeURIComponent(betweenY_2);
console.log("strRequest = " + strRequest + "\n\n");
//strRequest = encodeURIComponent(strRequest);
//console.log("strRequestEncode = " + strRequest + "\n\n");
var xmlHttp;
xmlHttp = new XMLHttpRequest();
// связываем с данным контекстом
xmlHttp.onreadystatechange = processingResponse;
xmlHttp.open("POST", "/php_backend/lab2.php", false);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.send(strRequest);
}
function putImgExtra(objFromJson, idDiv) {
var tagImg = document.createElement("img");
var srcImg = objFromJson.src;
var widthImg = objFromJson.width;
var heightImg = objFromJson.height;
tagImg.setAttribute("src", srcImg);
tagImg.setAttribute("width", widthImg);
tagImg.setAttribute("height", heightImg);
var tagDiv = document.getElementById(idDiv);
if (tagDiv.hasChildNodes()) {
tagDiv.removeChild(tagDiv.firstChild);
}
tagDiv.appendChild(tagImg);
}
function putImgContourInDiv() {
// параметры картинки
var srcImg = objResponse.imgContour.src;
var widthImg = objResponse.imgContour.width;
var heightImg = objResponse.imgContour.height;
// создадим каву
var canvas = document.createElement("canvas");
canvas.setAttribute("width", widthImg);
canvas.setAttribute("height", heightImg);
contextCanvas = canvas.getContext("2d");
var imageObj = new Image();
imageObj.onload = function(){
contextCanvas.drawImage(imageObj, 0, 0);
afterLoadImg();
}
imageObj.src = srcImg;
// посылаем канву в div
var tagDiv = document.getElementById(idPlot);
if (tagDiv.hasChildNodes()) {
tagDiv.removeChild(tagDiv.firstChild);
}
tagDiv.appendChild(canvas);
}
function afterLoadImg(){
contextCanvas.fillRect(0, 0, 100, 100);
}
this.calc = function () {
makeRequest();
console.log("\n\nIMG: " + objResponse.imgContour.src);
// поместить 3D картинку в idPlot3D
putImgExtra(objResponse.img3D, idPlot3D);
putImgExtra(objResponse.imgExpression, idExpression);
putImgContourInDiv();
// while(!loadOk);
}
}
// берем значения из форм
// после создаем объект и у объекста запускаем метод расчета и постройки графика
function start_calc(idForm, idPlot, idConsole, idPlot3D, idExpression) {
var form = document.getElementById(idForm);
var strFunc = form.querySelector("input[name=function]").value;
var startX = parseFloat(form.querySelector("input[name=start_x]").value.replace(",", "."));
var startY = parseFloat(form.querySelector("input[name=start_y]").value.replace(",", "."));
var betweenX_1 = parseFloat(form.querySelector("input[name=between_x_1]").value.replace(",", "."));
var betweenX_2 = parseFloat(form.querySelector("input[name=between_x_2]").value.replace(",", "."));
var betweenY_1 = parseFloat(form.querySelector("input[name=between_y_1]").value.replace(",", "."));
var betweenY_2 = parseFloat(form.querySelector("input[name=between_y_2]").value.replace(",", "."));
var eps = parseFloat(form.querySelector("input[name=eps]").value.replace(",", "."));
//определяем метод - какой объект создать
switch (idForm) {
case "form_pa":
var objPowell = new Powell(startX, startY, eps, strFunc, idPlot, idConsole, betweenX_1, betweenX_2, betweenY_1, betweenY_2, idPlot3D, idExpression);
objPowell.calc();
break;
default:
alert(idForm + " - неопознанная idForm!");
break;
}
}
// нажата кнопка по умолчанию
function insertDefaultValue(idInput){
var tagInput = document.getElementById(idInput);
console.log("Default input = " + idInput);
if (idInput == "fun_pa"){
tagInput.value = "((x*cos(30)+(y-1)*sin(30))^2)/4 + (((y-1)*cos(30)-x*sin(30))^2)/36";
}
}
document.addEventListener("DOMContentLoaded", function () {
// вешаем слушателя на кнопку расчета для метода пауэла
var btnResultPA = document.getElementById("result_pa");
btnResultPA.addEventListener("click", function () {
// ид формы для расчета и ид места куда выводим график и ид на консоль
start_calc("form_pa", "plot_pa", "console_pa", "3d_plot_pa", "expression_pa");
});
// слушатель - кнопка "По умолчанию"
var btnDefault = document.getElementById("default_pa");
// fun_pa - какой график строим (idInput)
btnDefault.addEventListener("click", function(){insertDefaultValue("fun_pa");}, false);
});