Калькулятор на сайт
Приветствую всех, друзья! Кто может помочь, я начинающий программист.
Возникла задача написать простенький калькулятор для сайта продающего фотообои. Чтоб клиент вводил высоту и ширину обоев в квадратных метра, выбирал материал и итог уже выводился в погонных метрах, т.к. у каждого материала разные погонные метры. Я нашел подходящий скрип, подпилил под нужды, но не могу сделать, чтоб квадратные метры переводились в погонные для каждого материала, когда пользователь кликал на нужный ему материал. Вот код, может кто подскажет как это сделать? <section class="section"> <div class="container"> <p class="h1 text-center">Калькулятор расчета стоимости услуг</p> <div class="small-line"></div> <div class="row price"> <div class="col-md-4 col-md-offset-4"> <div class="list-group calculator"> <div class="list-group-item name-price"><h3>Стоимость печати</h3></div> <div class="list-group-item box-price"> <div class="box-filter" data-price="1000"> <div class="form-group"> <label>Площадь фотообоев</label> <div class="row"> <div class="col-md-4" style="padding-top: 14px;">В метрах:</div> <div class="col-md-3"><input type="text" name="roof" class="form-control" id="roof" value="" placeholder="0"> ш</div> <div class="col-md-3"><input type="text" name="roof1" class="form-control" id="roof1" value="" placeholder="0"> в</div> </div> </div> <div class="form-group"> <label>Материал</label> <ul class="parametrs" id="pol"> <li class="label label-default" data-param="1">Бумажные фотообои с ПВХ покрытием (текстура "под иней")</li> <li class="label label-default" data-param="1.1">Бумажные фотообои с ПВХ покрытием (текстура "под древний папирус")</li> <li class="label label-default" data-param="1.2">Бумажные фотообои с ПВХ покрытием (текстура "под текстиль")</li> <li class="label label-default" data-param="1.4">Бумажные фотообои с ПВХ покрытием (текстура "живопись маслом")</li> <li class="label label-default" data-param="1">Бумажные фотообои с ПВХ покрытием (текстура "песок")</li> <li class="label label-default" data-param="1">Бумажные фотообои с ПВХ покрытием (текстура "лен")</li> <li class="label label-default" data-param="1">Бумажные фотообои с ПВХ покрытием (текстура "влажная штукатурка")</li> <li class="label label-default" data-param="1">Бумажные фотообои с ПВХ покрытием (текстура "штукатурка")</li> <li class="label label-default" data-param="1">Бумажные фотообои с ПВХ покрытием (текстура "мелкий песок")</li> <li class="label label-default" data-param="1">Бумажные фотообои с ПВХ покрытием (текстура "гладкая")</li> </ul> <ul class="parametrs" id="fliz"> <li class="label label-default" data-param="1">Флизелиновые фотообои (текстура "венецианская штукатурка")</li> <li class="label label-default" data-param="0.95">Флизелиновые фотообои (текстура "штукатурка")</li> <li class="label label-default" data-param="1.15">Флизелиновые фотообои (текстура "штукатурка")</li> <li class="label label-default" data-param="1.2">Штукатурка с покраской</li> </ul> </div> </div><!-- /.box-filter --> </div> <div class="list-group-item footer-price"> <button type="button" class="btn-outlined btn-lg btn-default price-button">Рассчитать стоимость</button> </div> </div> </div> </div> </div> </section> $(document).ready(function () { $('.price-button').click(function() { var boxPrice = $(this).closest('.col-md-4'); function hideButton () { $(boxPrice).find('.price-button').hide(); $(boxPrice).find('.footer-price').append('<h4>Итог: <span class="cur"></span> <span class="rub">р. </span></h4>'); }; $(boxPrice).find('.box-price').animate({height: '550px'}, {'duration': 500}, {'easing': 'linear'}, hideButton()); }); $('ul.parametrs li').click(function() { var listParam = $(this).closest('ul.parametrs'); $(listParam).find('li.check-param').removeClass('check-param'); var elemParam = $(this); $(elemParam).addClass('check-param'); var elemAttr = $(elemParam).attr('data-param'); }); function valParam () { var Price = $('.box-filter').attr('data-price'); var roofValue = $('#roof').val(); var roofValue1 = $('#roof1').val(); var roofValue2 = roofValue * roofValue1; var paramValuePol = $('#pol').find('li.check-param').attr('data-param'); var paramValueSteny = $('#steny').find('li.check-param').attr('data-param');/ if ($.isNumeric(roofValue2)) { if (!$.isNumeric(roofValue2)) roofValue2 = 1; if (!$.isNumeric(paramValuePol)) paramValuePol = 1; if (!$.isNumeric(paramValueSteny)) paramValueSteny = 0; var total = Price * roofValue2 * paramValuePol + paramValueSteny;//формула расчета общей стоимости var newTotal = Math.round(total);//округление $('.cur').html(newTotal); $('.rub').show(); }; }; $('.calculator').on('click keyup', valParam); }) Например у флизилиновых обоев погонный метр 0,75, а у ПВХ 1,3 Вот примерная формула = Ширина/ширина материала*высота(высота в метрах квадратных)*цена. Как в JS менять параметр "ширина материала" при выборе нужного значения пользователем. Подскажите пожалуйста, заранее благодарен! |
С вашим калькулятором итог будет как в анекдоте:
- У соседей такая же квартира, спроси сколько обоев они покупали. После оклейки: - Что же вы сволочи сказали, что 15 рулонов, у нас 5 осталось?! - Все правильно, у нас тоже 5 осталось. В сети же много описано как посчитать количество рулонов, и далеко не ширина/ширина * высота .... |
Нет, такой калькулятор не пойдет. Мы занимаемся печатью фотообоев, важно, чтоб клиент вводил метры, а ему цена вводилась в погонных метрах. Это нужно для сайта.
|
Цитата:
тогда поясните что значит за погонные метры, что это в итоге означает, а то я не понимаю: Цитата:
|
Погонный метр это ширина рулона, они бывают 0,75, 1,3, 1,5 метра. Клиент вводит допустим 3м. ширина, 2 м. высота. Нужно расчитать сколько будет полотен, например по 1,3, только в цене. Высота полотна может быть любая, а вот ширина ограничена. Как то так:)
|
Цитата:
|
3 метра это ширина зоны для оклейки 2 это высота. Сколько нужно материала, если ширина одного полотна 1,30, а высота 2. В данном примере погонный метр - это ширина 1,30 высота метр. Сколько таких погонных метров будет на оклеемой площади, результат будет округлятся в большую сторону
|
Ширина/ширина материала*высота(высота в метрах квадратных)*цена
Как может быть высота в квадратных метрах? И потом где фигурируют эти данные - Погонный метр это ширина рулона, они бывают 0,75, 1,3, 1,5 метра.? Ведь вместо них в data-param от макс. 1.4 до мин. 0.95 - это что такое? Причем это потом присваивается переменным с какими-то "дикими" именами не понятно о чем говорящими - paramValuePol, paramValueSteny :) ( (Ширина оклеиваемой поверхности / ширина материала) * высота оклеиваемой поверхности ) - это получили длину в метрах. Правда все мы знаем, что тютя в тютю обои обрезать не получится, так как придется выравнивать их по рисунку, а не там где отрезал, там и срослось. Но как бы то ни было посчитали длину, посчитали правильно? Теперь чтобы получить цену, нужно знать единицу цены за 1 метр каждого из материалов. Вот эти параметры - ширина материала, цена за 1 метр и должны содержать в себе элементы, и лучше это делать выпадающим списком, а не ul + li. Это можно использовать кастомизированный список, в котором для красоты пользователю подсовывают его "заместителя" ul + li, но "в тени" работает все таки список. А он в значениях своих должен содержать не цены или ширину материала, а идентификатор материала, ибо как не считай на клиенте, а окончательный расчет всегда за сервером, не зависимо от того что там на клиенте считалось. Допустим, для примера, здесь опции содержат параметр, в котором указана ширина материала и цена за метр: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style> </style> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script> $(function() { //в полях ввода только цифры и без ведущего нуля //если можно вводить не целые значения, то надо разрешить ввод точки или запятой $('input').keyup(function() { this.value = this.value.replace(/^0|\D/,'') }); //расчет $('button').click(function() { var W = $('#width_area').val(), H = $('#height_area').val(), p = $('#wallpaper'), v = p.val(), d = p.find(':selected').data('check'); if(!W || !H || !v) { alert('Не выбраны параметры!') return } //считаем по-детально $('#details').html('Ширина материала: ' + d[0] + ' м<br>' + 'Цена за метр: ' + d[1] + ' руб.<br>' + 'Требуется полос: ' + Math.round(W / d[0]) + ' шт.<br>' + 'Всего метров: ' + Math.round((W / d[0]) * H) + ' м<br>' + 'Итоговая цена: ' + Math.round((W / d[0]) * H * d[1]) + ' руб.'); }) }); </script> </head> <body> Материал: <form autocomplete="off"> <select id="wallpaper" name="" required=""> <option value="">Выберите материал...</option> <optgroup label="Бумажные фотообои с ПВХ покрытием - ширина 1.3 м"> <option value="121" data-check="[1.3,25]">Текстура "под иней"</option> <option value="234" data-check="[1.3,20]">Текстура "под древний папирус"</option> <option value="123" data-check="[1.3,32]">Текстура "живопись маслом"</option> <option value="11" data-check="[1.3,40]">Текстура "песок"</option> </optgroup> <optgroup label="Флизелиновые фотообои - ширина 0.75 м"> <option value="324" data-check="[0.75,55]">Текстура "венецианская штукатурка"</option> <option value="333" data-check="[0.75,40]">Текстура "штукатурка"</option> <option value="434" data-check="[0.75,35]">Текстура "штукатурка"</option> </optgroup> </select> <hr /> Ширина поверхности: <input id="width_area" name="" required="" /> <hr /> Высота поверхности: <input id="height_area" name="" required="" /> </form> <hr /> <button>Расчитать цену</button> <hr /> Детализация: <div id="details"></div> </body> </html> |
Да, спасибо, это ближе к истине, практически, что нужно. Не много подправлю и выложу рзультат:)
|
Часовой пояс GMT +3, время: 10:57. |