Gridstack.js: ๋ฐฑ๋ถ„์œจ ๋Œ€์‹  ํ”ฝ์…€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ ์ • ๋„ˆ๋น„ ๊ฒฉ์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 11์›” 06์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: gridstack/gridstack.js

์ฐฝ ํฌ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด ๊ณ ์ • ๋œ ์…€ ๋„ˆ๋น„์™€ ๋†’์ด๋ฅผ ๋งŒ๋“ค๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์œ„์ ฏ์ด 20px ๋‹จ์œ„๋กœ ์œ ๋™์ ์œผ๋กœ ์œ„์•„๋ž˜๋กœ ์ด๋™ํ•  ์ˆ˜์žˆ๋Š” 20px x 20px ๊ทธ๋ฆฌ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. 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 ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ % ๋Œ€์‹  px๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„์‚ฐ๋˜๋„๋ก scss ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

.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; }
  }
}

์ด๋ ‡๊ฒŒํ•˜๋ฉด ๊ทธ๋ฆฌ๋“œ ํ•ญ๋ชฉ์ด ์˜ฌ๋ฐ”๋ฅธ 20px ๊ทธ๋ฆฌ๋“œ ์œ„์น˜์— ์Šค๋ƒ…๋˜์ง€๋งŒ ์ˆ˜ํ‰ ๋“œ๋ž˜๊ทธ๋Š” ๋œ ๋ถ€๋“œ๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ‰ ๋“œ๋ž˜๊ทธ๊ฐ€ ๊ทธ๋ฆฌ๋“œ ๋„ˆ๋น„์— ๋งคํ•‘๋˜๋„๋ก .scss ์Šคํฌ๋ฆฝํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด width ๋˜๋Š” cellWidth ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? % ๊ณ„์‚ฐ์—์„œ ๋ฒ—์–ด๋‚˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. :)

question

๋ชจ๋“  6 ๋Œ“๊ธ€

@cblokker ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„

์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์Šฌํ””์„ ์ผ์œผํ‚ค๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

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

ํ”ฝ์…€ ๊ธฐ๋ฐ˜ ๋„ˆ๋น„์˜ ๊ฒฝ์šฐ ์—ด์„ ํ”ฝ์…€ ๋‹จ์œ„๋กœ ์ •์˜ํ•˜๋Š” CSS์™€ ํ•จ๊ป˜ this.opts.width ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด์ด ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ๋ชจ๋ธ์— ์žˆ์—ˆ๋Š”์ง€ (% ๋˜๋Š” px) ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด gridstack์— ์Šค๋งˆํŠธ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์–ด๋–ค ๋ชจ๋“œ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๊ตฌ์„ฑ ์˜ต์…˜์ด ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ ๊ทธ๊ฒƒ์„๋ณด๊ณ  ๋†€๊ณ ์žˆ๋‹ค.

ํŽธ์ง‘ 2 : ๋‚ด 5 ๋ถ„ ์ˆ˜์ •. ์ ์–ด๋„ ์•„์ง ๋ฐ˜์‘ ํ˜• ํ๋ฆ„์ด ์•„์ง ์—†์Šต๋‹ˆ๋‹ค.
Diff : ์ง€์› ํ”ฝ์…€ ๋„ˆ๋น„

4k ํ™”๋ฉด์—์„œ ๊ทธ๋ฆฌ๋“œ๋ฅผ ๋ณด๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋•Œ๋•Œ๋กœ ์›น ํŽ˜์ด์ง€๋ฅผ ๋„“๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ํฌ๊ธฐ๊ฐ€ ๊ฑฐ์˜ ์ ˆ๋ฐ˜ ์ธ ์ƒˆ ๊ทธ๋ฆฌ๋“œ๋ฅผ ์„ค์ • ํ•œ ๋‹ค์Œ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ๋•Œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•  ํ•ด์ƒ๋„๋กœ ํŽ˜์ด์ง€๋ฅผ ๋‚ด๋ ค ๊ฐ€๋ฉด ๋„ˆ๋น„๊ฐ€ ๋„ˆ๋ฌด ์ข์Šต๋‹ˆ๋‹ค.

์ €๋„์ด ๊ธฐ๋Šฅ์ด gridstack์—์„œ ์ง€์›๋˜๋Š” ๊ฒƒ์„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๋“œ ์Šคํƒ์—์„œ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ทธ ๋™์•ˆ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€ (1 ํ–‰, disabledOneColumnMode, height = 1)๋ฅผ ์œ„ํ•ด ํ•ดํ‚น ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋“  ํƒ€์ผ์„ 100px ๋„ˆ๋น„๋กœ ๊ฐ•์ œํ•˜๋ ค๋ฉด (๋‚ด ๋ชจ๋“  ํƒ€์ผ์€ ๋„ˆ๋น„ = 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); }
ํ•ดํ‚น์€ ํ˜„์žฌ ๊ทธ๋ฆฌ๋“œ ๋„ˆ๋น„ (px)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋„ˆ๋น„ (์—ด ์ˆ˜)๋ฅผ ์กฐ์ •ํ•˜์—ฌ cellWidth๋ฅผ 100px (CSS์— ์„ค์ •๋œ๋Œ€๋กœ)๋กœ ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

cellHeight ๋ฅผ ์›ํ•˜๋Š”๋Œ€๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ  ์˜ต์…˜์„ gridstack์— ์ „๋‹ฌํ•˜๊ธฐ ์ „์— Javascript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐจ์›์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์›ํ•˜๋Š” ๋น„์œจ์„ ์„ค์ •ํ•˜๊ณ  ํŠน์ • ํ”ฝ์…€ ๊ธฐ๋ฐ˜ ๋„ˆ๋น„์™€ ๋†’์ด๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰