Приветствую всех! В этот раз речь пойдет...

Приветствую всех! В этот раз речь пойдет о создании калькулятора для расчета взвешенных оценок. Такие оценки часто используют при проведении различных тестирований и сравнений. Например, вы хотите сравнить несколько мобильных телефонов между собой. Выбираете параметры, которые для вас важны (пусть это будут: цена, размер дисплея и вес) и для каждого из них выставляете оценку. Естественно некоторые параметры будут важнее чем другие. Например, цена важнее веса. И вы хотите это учесть.

Приветствую всех! В этот раз речь пойдет...

Для этого используются так называемые взвешенные оценки. Каждому параметру присваивается свой вес, который отражает его важность (чем больше, тем важнее), а затем рассчитывается суммарная оценка. В суммарную оценку входит сумма оценок всех параметров, умноженных на их вес. При этом удобно, чтобы сумма весов всех параметров равнялась 1 (100%). Например, цена – 50%, размер дисплея – 40%, вес – 10%. Теперь рассмотрим пример создания такого калькулятора для 3-х параметров. Нам понадобятся 3 поля для ввода оценок каждого из параметров и 3 слайдера (slider) для задания их весов. В данном случае слайдеры создадут очень наглядное представление весов параметров. К тому же мы сделаем их связанными между собой и пользователю не придется следить за тем, чтобы сумма их значений была равна 100%. Чтобы показать как будет выглядеть окончательный результат, я сделал демонстрационную страничку. Кроме того, вы можете скачать архив с исходниками этого примера и запустить его локально. Сразу хочу обратить ваше внимание на чекбоксы (checkbox) справа от слайдеров. Они служат для того, чтобы заблокировать изменение соответствующего слайдера. Т. к. слайдеров у нас три, то при перемещении одного из них, будут изменяться значения остальных. Поэтому принцип работы следующий. Выставляете нужное значение для первого слайдера, блокируете его, выставляете значения остальных слайдеров, вводите оценки и сразу видите результат.

Структура и принцип работы калькулятора Наше приложение состоит из одной HTML страницы, трёх JavaScript файлов (из них два – это библиотеки jQuery и jQuery UI) и 2-х файлов с CSS стилями. Начнём со страницы – index. html.

<?xml version=”1.0″ encoding=”UTF-8″?> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”  ”http://www. w3.org/TR/xhtml1/DTD/xhtml1-strict. dtd”> <html xmlns=”http://www. w3.org/1999/xhtml” xml:lang=”en” lang=”en”>   <head>  <title>Каклькулятор, взвешенные оценки</title>    <meta http-equiv=”content-type” content=”text/html;charset=utf-8″ />  <meta http-equiv=”Content-Style-Type” content=”text/css” />    <meta name=”description” content=”Использование ползунков (slider) для создания калькулятора” />  <meta name=”keywords” content=”калькулятор, ползунки, slider, взвешенная оценка” />    <link rel=”stylesheet” type=”text/css” href=”css/ui-lightness/jquery-ui-1.7.2.custom. css” media=”all” />  <link rel=”stylesheet” type=”text/css” href=”styles. css” media=”all” /> </head>   <body>   <div id=”parameter_1″ class=”calc_row”>  <input type=”text” name=”val_1″ id=”val_1″ class=”val_field” value=”0″ />  <div id=”weight_1″ class=”slider”></div>  <div id=”sv_1″ class=”slider_val”></div>  <input type=”checkbox” class=”sl_enable” /> </div>   <div id=”parameter_2″ class=”calc_row”>  <input type=”text” name=”val_2″ id=”val_2″ class=”val_field” value=”0″ />  <div id=”weight_2″ class=”slider”></div>  <div id=”sv_2″ class=”slider_val”></div>  <input type=”checkbox” class=”sl_enable” /> </div>   <div id=”parameter_3″ class=”calc_row”>  <input type=”text” name=”val_3″ id=”val_3″ class=”val_field” value=”0″ />  <div id=”weight_3″ class=”slider”></div>  <div id=”sv_3″ class=”slider_val”></div>  <input type=”checkbox” class=”sl_enable” /> </div>   <div id=”results”></div>   <script type=”text/javascript” src=”js/jquery-1.3.2.min. js”></script> <script type=”text/javascript” src=”js/jquery-ui-1.7.2.custom. min. js”></script> <script type=”text/javascript” src=”js/main. js”></script> </body> </html> * This source code was highlighted with Source Code Highlighter.

В заголовке страницы мы подключили CSS файлы (строки 15 и 16). Первый распространяется вместе с jQuery UI и используется для оформления слайдеров, второй – используется для оформления страницы. Сама страница содержит три практически одинаковых блока. В каждый из них входят: – текстовое поле – задаёт оценку параметра; – слайдер – указывает вес параметра; – текстовая надпись – отображает текущее значение слайдера; – чекбокс (checkbox) – используется для включения/отключения слайдера. За ними расположен блок, показывающий суммарную оценку (строка 42) В конце страницы мы подключаем JavaScript файлы (строки 44-46). Сначала библиотека jQuery, затем jQuery UI и файл с нашими скриптами (main. js). Теперь рассмотрим наш main. js. Это самая сложная и объёмная часть калькулятора. Но большая часть кода касается настройки взаимной работы слайдеров и чекбоксов.

$(function() {  /* создаем слайдеры */  $(“.slider”).slider();    /* устанавливаем начальные значения */  $(“.sl_enable”).attr(‘checked’, false);    $(“.slider”).each(function() {  $(this).slider(‘option’, ‘value’, 33.3);  });    $(“.slider_val”).html(“33.3 %”);    $(‘.val_field’).val(‘0′);    calculate();    /* минимальное и максимальное значение активных слайдеров */  var min = 0;  var max = 100;    /*  Устанавливаем обработчики чекбоксов.  Использовать событие change не получается, т. к. в IE оно возникает  после того как checkbox теряет фокус (т. е. после переключения  checkbox’а нужно кликнуть где-нибудь на странице, чтобы возникло  событие change)  */  $(“.sl_enable”).click(function() {  var curId = getCurId(this);  var curSlider = $(‘#weight_’ + curId);  if (this. checked) {  curSlider. slider(‘disable’);  $(“#sv_” + curId).addClass(‘gray’);  }  else {  curSlider. slider(‘enable’);  $(“#sv_” + curId).removeClass(‘gray’);  }  setMinMax();  });    /* обработчик событий slide слайдеров (возникает при перемещении слайдера) */  $(“.slider”).bind(’slide’, function(event, ui) {  //блокируем перемещение слайдера если оно выходит за допустимые пределы  if ((ui. value > max) || (ui. value < min)) {  return false;  }  updateSliders(this, ui. value);  updateLabels();  calculate();  })  .bind(’slidestop’, function() {  /*  Этот обработчик вызывается после перемещения слайдера.  Нужен для того, чтобы обновить значение текущего слайдера  (событие slide возникает раньше)  */  calculate();  updateLabels();  });    /* Эта функция возвращает id текущего слайдера */  function getCurId(elem) {  var parentId = $(elem).parent().attr(‘id’);  return parentId. substring(10);  }    /*  Эта функция устанавливает минимально и максимально допустимые значения  слайдеров.  */  function setMinMax() {  var enabledSliders = $(“.slider[aria-disabled!=true]“);  var disabledSliders = $(“.slider[aria-disabled=true]“);    // определяем сумму значений, установленных на отключенных слайдерах  var total = 0;  disabledSliders. each(function() {  total += $(this).slider(‘option’, ‘value’);  });    // задаём минимальные и максимальные значения для включенных слайдер

Понравилась статья? Получай обновления и будь всегда в курсе событий!
Подпишись на RSS или
blog comments powered by Disqus