gpt4 book ai didi

javascript - 如何随机化 Polymer 中 div 的显示顺序

转载 作者:行者123 更新时间:2023-11-30 20:27:33 25 4
gpt4 key购买 nike

我试图在 Polymer 中随机显示 div,但在将这篇文章翻译到框架中时遇到了问题。

Random Div Order on Page Load

ready() {
super.ready();
let cards = this.shadowRoot.querySelectorAll('.className');
for(var i = 0; i < cards.length; i++){
let target = Math.floor(Math.random() * cards.length -1) + 1;
let target2 = Math.floor(Math.random() * cards.length -1) +1;
cards.eq(target).before(cards.eq(target2));
}

调用 cards.eq 时失败...

这可以用 dom-repeat 解决吗?

最佳答案

您链接的解决方案使用 jQuery 来选择 div,而在您的情况下 cards 是 native querySelector 调用的结果,没有 eqbefore 方法。

Could this be solved with a dom-repeat?

是的:您可以将数据模型存储在 div 后面的一个属性中,并在呈现 div 之前对其进行洗牌:

<dom-module id="my-view">
<template>

<!-- Render the divs using dom-repeat -->
<template is="dom-repeat" items="[[divs]]">
<div>{{item.name}}</div>
</template>

</template>

<script>
class MyView extends Polymer.Element {
static get is() { return 'my-view'; }

static get properties() {
return {
divs: {
type: Array,
value: [],
}
};
}

// In connectedCallback you can initialise the divs property
// by shuffling the initial ordered array using the Fisher-Yates algorithm
// https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
connectedCallback() {
super.connectedCallback();
let array = [ // The ordered model behind the divs
{ name: 'Div #1' },
{ name: 'Div #2' },
{ name: 'Div #3' },
{ name: 'Div #4' },
{ name: 'Div #5' },
];
let currentIndex = array.length, temporaryValue, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
this.divs = array;
}

}

window.customElements.define(MyView.is, MyView);
</script>
</dom-module>

关于javascript - 如何随机化 Polymer 中 div 的显示顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50725943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com