javascript – 如何检测CSS flex wrap事件

前端之家收集整理的这篇文章主要介绍了javascript – 如何检测CSS flex wrap事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有flex容器里面有物品.如何检测flex wrap事件?我想对包装的元素应用一些新的CSS.我想这是不可能通过纯CSS检测wrap事件.但这将是非常强大的功能!当元素包裹到新行/行中时,我可以尝试通过媒体查询“捕获”这个断点事件.但这是一个可怕的做法.我可以尝试通过脚本检测它,但它也不是很好.

我非常惊讶,但简单的$(“#element”).resize()不能检测flex容器的高度或宽度更改,以将适当的CSS应用于子元素.大声笑.

我发现只有这个jquery代码的例子才行
jquery event listen on position changed

但还是非常可怕

解决方法

这是一个潜在的解决方案.可能还有其他问题需要检查.

基本思想是循环弹性项目,并测试他们的顶部位置与以前的兄弟姐妹.如果顶部值较大(因此进一步下降页面),则该项目已包装.

函数detectWrap返回一个已经包装的DOM元素的数组,并且可以根据需要用于样式.

功能可以与window.resize一起使用,以便在窗口调整大小时检测包装.因为StackOverflow代码窗口没有调整大小,所以它不会在这里工作.

这是一个CodePen,适用于屏幕调整大小.

  1. var detectWrap = function(className) {
  2. var wrappedItems = [];
  3. var prevItem = {};
  4. var currItem = {};
  5. var items = document.getElementsByClassName(className);
  6.  
  7. for (var i = 0; i < items.length; i++) {
  8. currItem = items[i].getBoundingClientRect();
  9. if (prevItem && prevItem.top < currItem.top) {
  10. wrappedItems.push(items[i]);
  11. }
  12. prevItem = currItem;
  13. };
  14. return wrappedItems;
  15.  
  16. }
  17.  
  18. window.onload = function(event){
  19. var wrappedItems = detectWrap('item');
  20. for (var k = 0; k < wrappedItems.length; k++) {
  21. wrappedItems[k].className = "wrapped";
  22. }
  23. };
  1. div {
  2. display: flex;
  3. flex-wrap: wrap;
  4. }
  5.  
  6. div > div {
  7. flex-grow: 1;
  8. flex-shrink: 1;
  9. justify-content: center;
  10. background-color: #222222;
  11. padding: 20px 0px;
  12. color: #FFFFFF;
  13. font-family: Arial;
  14. min-width: 300px;
  15. }
  16.  
  17. div > div.wrapped {
  18. background-color: red;
  19. }
  1. <div>
  2. <div class="item">A</div>
  3. <div class="item">B</div>
  4. <div class="item">C</div>
  5. </div>

猜你在找的JavaScript相关文章