【问题标题】:Packery: Enable Dragability And GutterPackery:启用 Dragability 和 Gutter
【发布时间】:2017-09-23 11:09:03
【问题描述】:

我正在使用 Packery 一个 JavaScript 库和 jQuery 插件,它可以制作由 David DeSandro 创建的无缝且可拖动的布局。 我用它来设置我的投资组合,但下面的代码不起作用。我想让元素可拖动 (draggable) 并在项目元素之间添加水平和垂直空间 (gutter)。

<!DOCTYPE html>
<html>

<head>
    <title></title>
    <script type="text/javascript" src="https://unpkg.com/packery@2/dist/packery.pkgd.min.js"></script>    
    <script type="text/javascript" src="https://npmcdn.com/draggabilly@2/dist/draggabilly.pkgd.js"></script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
</head>

<body>

<div class="grid">
  <div class="grid-item grid-item--width2"><img src="http://www.naturalnews.com/gallery/640/Food/Fancy-Food.jpg" style="width: 100%; height: 100%;"></div>
  <div class="grid-item"><img src="https://s3-us-west-1.amazonaws.com/cdn.myawesomeurls.com/2317223231481790331/collections/9169011391481887406/bg_image.jpg" style="width: 100%; height: 100%;"></div>
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item grid-item--height2"></div>
  <div class="grid-item"></div>
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2 grid-item--height2"></div>
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item grid-item--height2"></div>
  <div class="grid-item"></div>
</div>

</body>

</html>
<style type="text/css">
* { box-sizing: border-box; } 

body { font-family: sans-serif; }

.grid {
  background: #DDD;
  max-width: 1200px;
}

.grid:after {
  content: '';
  display: block;
  clear: both;
}

.grid-item {
  float: left;
  width: 100px;
  height: 100px;
  background: #C09;
  border: 2px solid hsla(0, 0%, 0%, 0.5);
}

.grid-item--width2 { width: 200px; }
.grid-item--height2 { height: 200px; }

.grid-item:hover {
  border-color: hsla(0, 0%, 100%, 0.5);
  cursor: move;
}

.grid-item.is-dragging,
.grid-item.is-positioning-post-drag {
  background: #C90;
  z-index: 2;
}

.packery-drop-placeholder {
  outline: 3px dashed hsla(0, 0%, 0%, 0.5);
  outline-offset: -6px;
  -webkit-transition: -webkit-transform 0.2s;
          transition: transform 0.2s;
}

</style>
<script type="text/javascript">

var $grid = $('.grid').packery({
  itemSelector: '.grid-item',
  columnWidth: 100, 
  gutter: 10
});

// make all grid-items draggable
$grid.find('.grid-item').each( function( i, gridItem ) {
  var draggie = new Draggabilly( gridItem ); // bind drag events to Packery

  $grid.packery( 'bindDraggabillyEvents', draggie );
});

$grid.on( 'click', '.grid-item', function( event ) {
  // change size of item by toggling large class
  $(  event.currentTarget  ).toggleClass('grid-item--large');
  // trigger layout after item size changes
  $grid.packery('layout');
});

</script>

【问题讨论】:

  • 哪一部分不起作用..

标签: javascript html css packery


【解决方案1】:

始终在顶部包含 jquery.min.js。主要错误是由于最后加载的文件导致 未定义打包的未捕获类型错误。其余所有代码都正确。

这是正确的工作解决方案。

var $grid = $('.grid').packery({
  itemSelector: '.grid-item',
  columnWidth: 100,
  gutter: 10
});

// make all grid-items draggable
$grid.find('.grid-item').each(function(i, gridItem) {
  var draggie = new Draggabilly(gridItem); // bind drag events to Packery

  $grid.packery('bindDraggabillyEvents', draggie);
});

$grid.on('click', '.grid-item', function(event) {
  // change size of item by toggling large class
  $(event.currentTarget).toggleClass('grid-item--large');
  // trigger layout after item size changes
  $grid.packery('layout');
});
* {
  box-sizing: border-box;
}

body {
  font-family: sans-serif;
}

.grid {
  background: #DDD;
  max-width: 1200px;
}

.grid:after {
  content: '';
  display: block;
  clear: both;
}

.grid-item {
  float: left;
  width: 100px;
  height: 100px;
  background: #C09;
  border: 2px solid hsla(0, 0%, 0%, 0.5);
}

.grid-item--width2 {
  width: 200px;
}

.grid-item--height2 {
  height: 200px;
}

.grid-item:hover {
  border-color: hsla(0, 0%, 100%, 0.5);
  cursor: move;
}

.grid-item.is-dragging,
.grid-item.is-positioning-post-drag {
  background: #C90;
  z-index: 2;
}

.packery-drop-placeholder {
  outline: 3px dashed hsla(0, 0%, 0%, 0.5);
  outline-offset: -6px;
  -webkit-transition: -webkit-transform 0.2s;
  transition: transform 0.2s;
}
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type="text/javascript" src="https://unpkg.com/packery@2/dist/packery.pkgd.min.js"></script>
<script type="text/javascript" src="https://npmcdn.com/draggabilly@2/dist/draggabilly.pkgd.js"></script>



<div class="grid">
  <div class="grid-item grid-item--width2"><img src="http://www.naturalnews.com/gallery/640/Food/Fancy-Food.jpg" style="width: 100%; height: 100%;"></div>
  <div class="grid-item"><img src="https://s3-us-west-1.amazonaws.com/cdn.myawesomeurls.com/2317223231481790331/collections/9169011391481887406/bg_image.jpg" style="width: 100%; height: 100%;"></div>
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item grid-item--height2"></div>
  <div class="grid-item"></div>
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2 grid-item--height2"></div>
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item grid-item--height2"></div>
  <div class="grid-item"></div>
</div>

【讨论】:

  • 以下代码在位于服务器外部时不起作用。例如,我只是把它放在桌面上它不起作用,但是当放入服务器或本地主机时它工作正常。但是,谢谢:) @Sahil Dhir
  • 仍然无法在服务器外部工作,但在服务器内部工作正常。 @Sahil Dhir
  • 没有显示错误描述。就在我尝试拖动单元格时,什么也没发生。甚至连排水沟都没有启用。当文件位于本地主机或服务器之外时。尝试在桌面上使用上面给定的代码创建一个 .html 文件,然后查看以下输出先生 @Sahil Dhir
猜你喜欢
  • 1970-01-01
  • 2014-07-08
  • 2014-12-07
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多