Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.09.2012, 15:28
Профессор
Отправить личное сообщение для PashPP Посмотреть профиль Найти все сообщения от PashPP
 
Регистрация: 26.07.2012
Сообщений: 281

Задачка. Расчитать количество столбцов/колонок
Есть блок, размер которого будет меняться, надо написать формулу, по которой будут вмещаться в него элементы так, чтоб их соотношение сторон было равно до максимально возможного.
Если по простому, то надо аккуратно вставить заданное кол.прямоугольничков в блок.

Вот уже третий вариант написал, но все не то...
<style>
  #keyboard {
    height: 300px;
    width: 400px;
    padding: 0;
    border: 1px solid black;
    clear: both;
    overflow: hidden;
  }

  .key {
    float: left;
    border: 1px solid green;
  }
  </style>

<div id='keyboard'></div>

<script type='text/javascript'>
function Keypad(KeypadDiv) {
  var keypad = document.getElementById(KeypadDiv);
  var keys = '';

  var keypadWidth = parseInt(getComputedStyle(keypad, '').width, 10);
  var keypadHeight = parseInt(getComputedStyle(keypad, '').height, 10);

  var heightPercent = keypadHeight/(keypadWidth+keypadHeight)

  var keyHeight = 100/Math.floor(Math.pow(32, heightPercent));

  var keyWidth = 100/Math.ceil(Math.pow(32, (1-heightPercent)))


  for(var e=0; e<32; e++) {
    keys += '<div class=\"key\" style=\"width:'+ keyWidth+ '%; height:'+ keyHeight +'%; -moz-box-sizing: border-box;-webkit-box-sizing: border-box; box-sizing: border-box;\" >' + String.fromCharCode(1072 + e) + '</div>';
  }
  keypad.innerHTML = keys;
}

var f = new Keypad('keyboard')
</script>
Ответить с цитированием
  #2 (permalink)  
Старый 16.09.2012, 19:03
Профессор
Отправить личное сообщение для PashPP Посмотреть профиль Найти все сообщения от PashPP
 
Регистрация: 26.07.2012
Сообщений: 281

Такой вариант получше, но смущает необходимость использования модификатора и на некоторых вариантах не работает.
<style>
  #keyboard {
    height: 300px;
    width: 400px;
    padding: 0;
    border: 1px solid black;
    clear: both;
    overflow: hidden;
  }
 
  .key {
    float: left;
    border: 1px solid green;
  }
  </style>
 
<div id='keyboard'></div>
 
<script type='text/javascript'>
function Keypad(KeypadDiv) {
  var keypad = document.getElementById(KeypadDiv);
  var keys = '';
  var mod = 0;

  var keypadWidth = parseInt(getComputedStyle(keypad, '').width, 10);
  var keypadHeight = parseInt(getComputedStyle(keypad, '').height, 10);

  var h = keypadHeight/keypadWidth;

  while(Math.round(Math.sqrt(32/(1/h))+mod)*Math.round(Math.sqrt(32/h)) < 32) {
    mod++;
  }

  var keyHeight = 100/Math.round(Math.sqrt(32/(1/h))+mod);
  var keyWidth = 100/Math.round(Math.sqrt(32/h));

  console.log(Math.ceil(keypadHeight/keypadWidth*Math.sqrt(32)) +"  "+Math.floor(keypadWidth/keypadHeight*Math.sqrt(32))+ "  "+ keyHeight + "  " + keyWidth + "  "+ Math.ceil(Math.sqrt(32/(1/h))) + '   '+ 100/Math.round(Math.sqrt(32/h)))

  for(var e=0; e<32; e++) {
    keys += '<div class=\"key\" style=\"width:'+ keyWidth+ '%; height:'+ keyHeight +'%; -moz-box-sizing: border-box;-webkit-box-sizing: border-box; box-sizing: border-box;\" >' + String.fromCharCode(1072 + e) + '</div>';
  }
  keypad.innerHTML = keys;
}

var f = new Keypad('keyboard')
</script>


И да, откуда берутся эти небольшие пустые места справа и внизу в браузерах окромя мозилы?
Предполагаю, что это особенности работы с дробными значениями размеров. Или не?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить количество дней до определенной даты beard Общие вопросы Javascript 3 24.06.2012 17:22
Ограничить количество символов в textarea iNfantry jQuery 2 14.05.2012 11:35
Задача в том, чтобы проставить галочки на журналы и газеты, выбрать количество месяце karat2707 Events/DOM/Window 5 18.04.2012 03:22
Посчитать общее количество баллов userbanderas jQuery 7 21.09.2011 16:36