欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

讓動態網格分配功能工作時出現問題

錢諍諍1年前8瀏覽0評論

所以我創建了一個網站,里面有一排排的卡片,上面有特定個人的信息,就像Instagram上的帖子一樣,使用網格布局。我正試圖使用Javascript編寫一個函數,它理想地從SQL數據庫中獲取一個輸入(即一個新條目)并創建一個新的& quot帖子& quot或者卡。每張新牌應該出現在牌桌的第一位,將所有其他以前的牌向右推一列,如果在一行的最后,則向下推一行。

更具體地說,在從按鈕而不是SQL數據庫輸入后僅處理卡片重新排列的函數的初始形式中: 該函數過濾我的CSS樣式表,創建包含某個關鍵字& quot卡特勒& quot(每張卡片對應于樣式表中單獨的第n個子元素,它只指定位置)。然后循環遍歷這個列表,更新grid-row-start/end & amp;grid-column-每個規則集的開始/結束值,如果卡片位于列的末尾,則列值遞增1,行值遞增1。在對CSSOM中的現有卡片進行更改之后,一個新的卡片(一組嵌套的div、p和img標簽)將被附加到DOM中的父元素上。

function adjust(){
const styleSheet = Array.from(document.styleSheets[0].cssRules);
 //filter to create list that contains only cartelle class rulesets 
const myRules = styleSheet.filter(ruleset => ruleset.selectorText.includes("cartelle"))

 //iterate along each ruleset in the list
let cardSetLength = Object.keys(myRules).length;
for (let i = 0; i < cardSetLength; i++)
  {
    
    for (const rule of myRules) 
    {
      let newGridColumn = rule.style.gridColumnStart;
      let newGridRow = rule.style.gridRowStart;
     
      
      if(newGridColumn === '5')
      {
        newGridRow = parseInt(newGridRow) + 1;
        newGridColumn = 2;

        rule.style.setProperty("grid-column-start", newGridColumn);
        console.log(rule.style.gridColumnStart);

        rule.style.setProperty("grid-column-end", newGridColumn + 1);

      }
    
      else
      {
        newGridColumn = parseInt(newGridColumn) + 1;
   

        rule.style.setProperty("grid-column-start", newGridColumn);
        console.log(rule.style.gridColumnStart);//should return 3
        rule.style.setProperty("grid-column-end", newGridColumn + 1);
        
        rule.style.setProperty("grid-row-start", newGridRow);
        rule.style.setProperty("grid-row-end", newGridRow + 1);
        
        console.log(rule.style.gridRowStart);//should return 3
      }
   
    }
      myRules[i].selectorText = `cartelle:nth-child(${i + 2})`;
      console.log(myRules[i].selectorText);// should return "cartelle:nth-child(2);"
      console.log(myRules[i].style);//should return {gird-row-start: 3...}
    }
    //if card is at the end of the last grid column, change row and set column values to first column
    

//create cartelle including: (img, div.text-box, p onclick=popup()) 
const formatRows = document.querySelector(".format-rows");
const fragment = document.createDocumentFragment();

let div1 = document.createElement("div");
div1.setAttribute("class", "cartelle");

let img = document.createElement("img");
img.setAttribute("class", "card-image");

let div2 = document.createElement("div");
div2.setAttribute("class", "text-box");

let p = document.createElement("p");
p.setAttribute("onclick", "popupation()");

p.textContent = "hello world";

fragment.appendChild(div1).appendChild(img).appendChild(div2).appendChild(p);

formatRows.prepend(fragment);

console.log(fragment)//returns empty dict;


let newCardStyle = ".cartelle:nth-child(1) {grid-row-start: 2; grid-row-end: 3; grid-column-start: 1; grid-column-end: 2;}";

const stylesheet2 = document.styleSheets[0];
const index = stylesheet2.cssRules.length;
console.log(stylesheet2.cssRules.length);
stylesheet2.insertRule(newCardStyle, index);
console.log(stylesheet2.cssRules[20].gridRowStart)//returns empty dict;
};

我目前正在努力實現這一點。好像不管我怎么做,新卡的插入導致之前的布局變得亂七八糟。我永遠也不能讓它完全按照我想要的那樣運行。有人有想法嗎?

這里是codepen鏈接,任何人都希望看到CSS & ampHTML: 密碼筆

你的解決方案過于復雜。只需將每張新卡片添加為網格的第一個子元素,您不需要調整任何CSS或重新定位任何東西——這一切都應該是自動的。

注意,我使用insertAdjacentHTML方法來添加每張卡片——這比使用基本的DOM方法createElement、setAttribute、appendChild和insertBefore要容易得多。

let count = 0, interval = null
const grid = document.querySelector('.cards')
const addCard = () => {
  count++
  const hue = Math.floor(Math.random() * 256);
  const s = `<div style="background: hsl(${hue},60%,50%)">${count}</div>`
  grid.insertAdjacentHTML('afterbegin', s)
  if (count == 20) clearInterval(interval)
}
addCard()
interval = setInterval(addCard, 2000)

body {
  margin: 1em;
  font-family: sans-serif;
}

.cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(5rem, 1fr));
  gap: 1em;
}

.cards>div {
  color: white;
  background: black;
  aspect-ratio: 1/1;
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 0.5em;
}

<div class="cards"></div>