CSS巨大的网格问题

时间:2018-10-21 21:58:51

标签: javascript css css3 css-grid

我正在使用CSS网格作为时间轴。网格产生约1300格,这确实对性能不利。

我需要使每个单元格都可单击,并在悬停时显示不同的颜色。我无法找到任何样式来设置“空”节点或与之交互,而无需渲染所有1300 div。

我该怎么办?

So many divs!!!!

2 个答案:

答案 0 :(得分:1)

Mike 'Pomax' Kamermans 所建议,最好的方法是检测鼠标单击并动态添加项目。您可以通过将值分配给item_widthitem_height来自定义项目的宽度和高度。

var item_width=40;
var item_height=40;
var added_items=[];
$(function(){
      $('.grid').on('click', function(e){
      var x = e.pageX - $(this).offset().left;
      var y = e.pageY - $(this).offset().top; 
      var item=$('<div class="item"></div>');
      var left=Math.floor(x/item_width)*item_width;
      var top=Math.floor(y/item_height)*item_height;
      var position={ 'left':left, 'top':top };
      var index=added_items.findIndex(p => p.left == position.left && p.top == position.top);
      if(index<0){
      added_items.push(position);
      item.css('left', left);
      item.css('top', top);
      item.css('background', "#"+((1<<24)*Math.random()|0).toString(16))
      item.appendTo($('.grid'));
      }
    });
  
});
.grid {
  
  width:400px;
  height:400px;
  border:1px solid red;
    position:relative;
  margin:10px;
}
.item {
  width:40px;
  height:40px;
  position:absolute;
  background:red;  
}
.item:hover { 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="grid"> </div>

答案 1 :(得分:-1)

您可以为列类添加一个eventHandler,并且相同的类具有相同的悬停或单击作用。 1300格也确实会降低页面的性能。为此,您可以研究无限滚动或类似方法。

https://demos.telerik.com/kendo-ui/grid/endless-scrolling-local