Показать сообщение отдельно
  #28 (permalink)  
Старый 11.08.2017, 22:01
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

j0hnik, Спасибо! Я вернусь к этому коду ещё не раз.

laimas, благодарю! Вы мне отличную идею подкинули. Мой будущий калькулятор должен при переключении делать на автомате перерасчёт введённых значений из мм в метры. К сожелению я не весь код могу прочитать с пониманием. Сейчас засяду за изучение.
Я структуру понял и частично понимаю, но пока у меня нет знаний чтобы правильно отредактировать под себя. Мне бы в результате иметь ТОЛЬКО м.кв. (без миллиметров). А так, оч даже круто работает. Не знаю, может быть ещё зайдёте и подскажите, возможно ли переключатель вынести в отдельную функцию и через неё прогонять расчёты.

Поэтому в макет инпутов добавил span id="ed_iz", где будет вывод мм или м.
<div class="row plos">
  <div class="col-sm-4">
    <h4>Прямоугольник</h4>
    <div class="st1">Длина:</div>
    <div class="st2"><input id="val_a" /><span id="ed_iz"></span></div>
    <div class="st1">Ширина:</div>
    <div class="st2"><input id="val_b" /><span id="ed_iz"></span></div>
    <div class="st1">Площадь прямоугольника:</div>
    <div class="st2"><span id="pls"></span> м.кв.</div>
  </div>
  <div class="col-sm-4">
    <img src="" style="margin-bottom: 5px;" />
    <div class="rezultat">ПЛОЩАДЬ ДВУХ ПРЯМОУГОЛЬНИКОВ = <span id="pl_dv_pr"></span> м.кв.</div>
  </div>
</div>

Отдельным файлом идёт скрипт калькулятора.
Основное для данных - это геометрические фигуры и их размеры. Задумка для расчёта самых разных фигур крыш, но для понимания заменю их стенами в комнатах.
Например имеем комнату где две стены прямоугольные две треугольные; или две трапеции + два прямоугольника. И так дальше по комбинациям фигур.
Поэтому площади самых разных фигур я вынес отдельно в функции:
//Площадь прямоугольника
	function s_pr(a, b) {
		a = parseFloat(a);
		b = parseFloat(b);
		var s = a * b;
		return s;
	}
	//Площадь треугольника через высоту
	function s_tr(a, h) {
		a = parseFloat(a);
		h = parseFloat(h);
		var s = a * 0.5 * h;
		return s;
	}
// и так далее по возможной геометрии...

В этом же файле идёт функция которая парсит значения и выводит результаты. Здесь в расчётах идут запросы к функциям площадей фигур:
$('document').ready(function(){
	$('input').on('keyup', function(){
		//Площадь двух одинаковых прямоугольников
		var a = $('#val_a').val().trim().replace(/,/,'.').replace(/[^\d\.]/g,'');
		var b = $('#val_b').val().trim().replace(/,/,'.').replace(/[^\d\.]/g,'');
 		var pl_dvuh_pr;
		pl_dvuh_pr = s_pr(a, b) * 2;	//обращение к функции  s_pr(a, b) площадь прямоугольника
		$('#pls').html(s_pr(a, b).toFixed(2));	//вывод площади прямоугольника
		$('#pl_dv_pr').html(pl_dvuh_pr.toFixed(2));	//вывод площади двух прямоугольников

		//Площадь двух прямоугольников и двух треугольников
		var a = $('#val.......;

	});
});

Теперь вот остановился на переключателе из метров в миллиметры. Думаю можно ли вывести это в отдельную функцию.
Изначально накидал вот такое безобразие:
//Переключатель метры/милиметры
	function metric() {
		var m;
		if($('#mm').prop('checked')) m = 0.000001;
		else m = 1;
		return m;
	}

Думал на это значение умножать площадь фигуры (в функциях площадей фигур)
pl_dvuh_pr = s_pr(a, b) * 2 * metric();

но что то не задалось.

Вот laimas подкинул ещё отличный функционал. Буду искать решение как это теперь правильно прикрутить к скрипту.
Ответить с цитированием