【问题标题】:Zoomable, resizable flex grid可缩放、可调整大小的弹性网格
【发布时间】:2018-07-13 19:36:42
【问题描述】:

我有 5x5 元素的基于 flex 的网格。中间的 3x3 网格是可点击的,点击元素使其背景变为红色并调整宽度和高度。其他元素正在调整到这个中心元素的大小。

这里是codepen的链接:codepen

现在我想在点击中心红色元素和 8 个周围元素后缩放 - 所以只有 9 个元素可见。接下来,当我更改中心元素时,查看更改并单击了元素和周围的 8 个元素。其他元素消失。最后,我只想查看 9 个元素并在它们周围移动。

我尝试更改 displayopacity 但动画不流畅。

也许你们有任何解决方案或想法如何解决这个问题或一些工具/库可以帮助我实现这个目标?

【问题讨论】:

  • 在您单击一个中心元素后,它会放大该元素和周围的 8 个元素并隐藏网格的其余部分?对吗?
  • 是的,其他元素消失了
  • 如果这是正确的行为,请在下面检查我的答案。如果是,我可以继续我的解决方案。

标签: javascript css reactjs flexbox grid


【解决方案1】:

我注意到作为用户,我不能点击最外层的元素。考虑到这一点,这是我的解决方案。

它并不漂亮,但它解决了一半的问题(仅隐藏,不缩放)。

将此添加到您的 javascript 的底部。确保在 codepen 中添加 jQuery。另外,here's the working pen 基于your own pen

document.getElementById('app').getElementsByClassName('wrapper')[0].addEventListener("click", function(){
  showAll();
  hideOthers();
});

document.addEventListener("dblclick", function(){
  showAll();
});

function hideOthers() {
  var activeChild = $('.wrapper .center-zoom').index() + 1;
  var indexToHide = [18,17,16,15,14,13,12,11,10,9,8,7,3,2];
  hideThese = new Array(26);
  for(i = 0; i < indexToHide.length; i++){
    hideThese[i] = activeChild - indexToHide[i];
  }

  for(j = 14; j < (indexToHide.length) * 2; j++){
    hideThese[j] = activeChild + indexToHide[j-14];
  }

  for (k = 0; k < hideThese.length; k++) {
     var $target = $(".wrapper div:nth-child(" + hideThese[k]+ ")");
     jQuery($target).css('opacity', '0');
  }
};

function showAll() {
  for(i = 0; i <= 25; i++){
    var $target = $(".wrapper :nth-child(" + i + ")");
    jQuery($target).css('opacity', '1');
  }
}

我正在研究如何进行缩放部分。让我回复你。

【讨论】:

  • 是的,作为用户你不能点击最外层的元素。最后点击这些元素将重绘一个网格。主视图将类似于codepen 然后当我单击例如。 on basic - basic 成为视口意义的中心。它移动到容器中心。不是相邻元素消失,相邻元素进入视野。在这支笔中,我将最外层元素设置为无。
猜你喜欢
  • 2019-10-19
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多