Gridstack.js: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сСтки фиксированной ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π½Π° основС пиксСлСй, Π° Π½Π΅ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ².

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 6 нояб. 2016  Β·  6ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: gridstack/gridstack.js

Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ высоту ячСйки нСзависимо ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠΊΠ½Π°. Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сСтку 20 пиксСлСй Π½Π° 20 пиксСлСй, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ»Π°Π²Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π²Π²Π΅Ρ€Ρ… ΠΈ Π²Π½ΠΈΠ· с шагом 20 пиксСлСй. Π― ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ высоту, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² cellHeight: 20 , Π½ΠΎ ΡˆΠΈΡ€ΠΈΠ½Π°, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ я ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

var options = {
      float: true,
      width: 53,
      acceptWidgets: '.grid-stack-item',
      cellHeight: 20,
      verticalMargin: 0,
      disableResize: true,
      alwaysShowResizeHandle: false
  };

  $('#grid-1').gridstack(options);

Π― ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» cellWidth: 20 , Π½ΠΎ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, это Π½Π΅ сработало. Π― Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» скрипт scss, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ рассчитывался Π½Π° основС px вмСсто%.

.grid-stack > .grid-stack-item {
  $gridstack-columns: 60;

  <strong i="11">@for</strong> $i from 1 through $gridstack-columns {
    &[data-gs-width='#{$i}'] { width: $i * 20px; }
    &[data-gs-x='#{$i}'] { left: $i * 20px; }
  }
}

Π­Ρ‚ΠΎ привязываСт элСмСнты сСтки ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ мСстополоТСниям сСтки 20 пиксСлСй, Π½ΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ пСрСтаскиваниС становится ΠΌΠ΅Π½Π΅Π΅ ΠΏΠ»Π°Π²Π½Ρ‹ΠΌ. Π•ΡΡ‚ΡŒ Π»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² скрипт .scss для Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ пСрСтаскивания ΠΊΠ°Ρ€Ρ‚ ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅ сСтки? Или ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° width ΠΈΠ»ΠΈ cellWidth ? Π₯ΠΎΡ‡Ρƒ ΡƒΠΉΡ‚ΠΈ ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ расчСтов% :)

ВсС 6 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

@cblokker Π’Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ

Π­Ρ‚ΠΎ функция, которая мСня ΠΎΠ³ΠΎΡ€Ρ‡Π°Π΅Ρ‚:

    GridStack.prototype.cellWidth = function() {
        return Math.round(this.container.outerWidth() / this.opts.width);
    };

Π’ случаС ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π½Π° основС пиксСлСй, Π° Ρ‚Π°ΠΊΠΆΠ΅ css, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ столбцы Π² пиксСлях, ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эта функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ this.opts.width.

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ понадобятся ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ умСния Π² gridstack, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ½ находится (% ΠΈΠ»ΠΈ px), ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΠ½ находится.

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ: это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊ просто. Π― ΠΈΠ³Ρ€Π°ΡŽ с этим сСйчас, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ.

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ 2: ΠΌΠΎΠ΅ 5-ΠΌΠΈΠ½ΡƒΡ‚Π½ΠΎΠ΅ исправлСниС. Π£ Π½Π΅Π³ΠΎ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π΅Ρ‰Π΅ Π½Π΅Ρ‚ ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.
Diff: ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°-пиксСльная ΡˆΠΈΡ€ΠΈΠ½Π°

МнС Π±Ρ‹ это ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с просмотром сСток Π½Π° экранах 4k, ΠΈΠ½ΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Π±-страница Π±Ρ‹Π»Π° ΡˆΠΈΡ€ΠΎΠΊΠΎΠΉ, ΠΈ Π² этом случаС Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ сСтку, Π³Π΄Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½Ρ‹ Π²Π΄Π²ΠΎΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ страница с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΡˆΠΈΡ€ΠΈΠ½Π° слишком узкая.

МнС Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эта функция ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»Π°ΡΡŒ gridstack.

Π’ΠΎ ΠΆΠ΅ самоС ΠΈ здСсь, я Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ это Π² стСкС сСтки.

Π’Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ я смог Π²Π·Π»ΠΎΠΌΠ°Ρ‚ΡŒ Π΅Π³ΠΎ для ΠΌΠΎΠ΅Π³ΠΎ простого Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° использования (ΠΎΠ΄Π½Π° строка, disabledOneColumnMode, height = 1)
Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ всС ΠΏΠ»ΠΈΡ‚ΠΊΠΈ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ 100 пиксСлСй (всС ΠΌΠΎΠΈ ΠΏΠ»ΠΈΡ‚ΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΡˆΠΈΡ€ΠΈΠ½Ρƒ = 1, это Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ слоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для любой ΡˆΠΈΡ€ΠΈΠ½Ρ‹):
Π’ CSS
$tile-width: 100px; /*100px*/ .grid-stack-item[data-gs-width="1"] { width: $tile-width; min-width: $tile-width; max-width: $tile-width; } .grid-stack-item { <strong i="9">@for</strong> $i from 1 through 20 { &[data-gs-x='#{$i}'] { left: $i * $tile-width; } } }
конструктор:
const width = $('.grid-stack').outerWidth(); this.grid = $('.grid-stack').gridstack({ auto: false, cellHeight: 80, disableResize: true, verticalMargin: 0, width: Math.round(width/100), height: 1, disableOneColumnMode: true }).data('gridstack');
Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π°
resizeHandler() { const width = $('.grid-stack').outerWidth(); const grid = $('.grid-stack').data('gridstack'); grid.setGridWidth(Math.round(width/100), true); }
Π₯акСрство Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для cellWidth Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 100 пиксСлСй (ΠΊΠ°ΠΊ установлСно Π² CSS), рСгулируя ΡˆΠΈΡ€ΠΈΠ½Ρƒ (количСство столбцов) Π½Π° основС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ сСтки (пиксСлСй).

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для cellHeight всС, Ρ‡Ρ‚ΠΎ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Javascript для опрСдСлСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ созданиСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² gridstack. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ любоС ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, ΠΈ Π΄Π°ΠΆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ высоту Π² пиксСлях.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ