本文将介绍如何使用 JavaScript 和 jquery 实现 DIV 元素的随机重排,并确保重排后的顺序符合预定义的规则,即首个元素必须为 Card 类型,后续元素在 Image 和 Card 类型之间交替出现,同时保证同类型元素内部的随机性。通过分离元素、随机排序和重新插入 dom,实现灵活且可控的元素重排。
实现原理
实现此功能的关键在于:
- 元素分离: 将不同类型的 DIV 元素(Card 和 Image)从 DOM 中分离出来,分别存储到不同的数组中。
- 随机排序: 使用 Fisher-Yates 洗牌算法对每个数组进行随机排序,确保同类型元素内部的随机性。
- 规则重组: 按照预定义的规则(首个 Card 类型,后续 Image 和 Card 交替)将元素重新插入到 DOM 中。
具体实现
以下是具体的代码实现,包括 html 结构、css 样式和 JavaScript 代码:
HTML 结构:
立即学习“Java免费学习笔记(深入)”;
<div class="row" id="content"> <div class="col-sm-12 col-md-6 col-lg-4" id="card1">Card #1</div> <div class="col-sm-12 col-md-6 col-lg-4" id="card2">Card #2</div> <div class="col-sm-12 col-md-6 col-lg-4" id="card3">Card #3</div> <div class="col-sm-12 col-md-6 col-lg-4" id="card4">Card #4</div> <div class="col-sm-12 col-md-6 col-lg-4" id="card5">Card #5</div> <div class="col-sm-12 col-md-6 col-lg-4" id="image1">Image #1</div> <div class="col-sm-12 col-md-6 col-lg-4" id="image2">Image #2</div> <div class="col-sm-12 col-md-6 col-lg-4" id="image3">Image #3</div> <div class="col-sm-12 col-md-6 col-lg-4" id="image4">Image #4</div> </div>
CSS 样式:
body { font: medium monospace; }
JavaScript 代码:
function shuffle(Array) { // Fisher-Yates shuffle for (let i = array.length - 1; i > 0; i--) { let j = Math.floor(Math.random() * (i + 1)); let temp = array[i]; array[i] = array[j]; array[j] = temp; } } $(function() { let cards = $("#content > [id^=card]").remove().get(); let images = $("#content > [id^=image]").remove().get(); shuffle(cards); shuffle(images); // 确保第一个元素是 Card 类型 $("#content").append(cards[0]); cards = cards.slice(1); // 移除第一个元素 // 交替添加 Image 和 Card 类型 let cardIndex = 0; let imageIndex = 0; while (cardIndex < cards.length || imageIndex < images.length) { if (imageIndex < images.length) { $("#content").append(images[imageIndex]); imageIndex++; } if (cardIndex < cards.length) { $("#content").append(cards[cardIndex]); cardIndex++; } } });
代码解释:
- shuffle(array) 函数实现了 Fisher-Yates 洗牌算法,用于随机排序数组。
- $(function() { … }); 确保在 DOM 加载完成后执行代码。
- $(“#content > [id^=card]”).remove().get(); 使用 jQuery 选择器选择所有 ID 以 “card” 开头的 DIV 元素,将其从 DOM 中移除,并转换为 JavaScript 数组。 $(“#content > [id^=image]”).remove().get(); 同理,获取所有 Image 类型的 DIV 元素。
- shuffle(cards); 和 shuffle(images); 分别对 Card 和 Image 数组进行随机排序。
- $(“#content”).append(cards[0]); 确保第一个元素是 Card 类型,并将其添加到 #content 中。cards = cards.slice(1); 从 cards 数组中移除第一个元素。
- while 循环交替添加 Image 和 Card 类型的元素到 #content 中,直到所有元素都被添加完毕。
注意事项
- 确保引入 jQuery 库。
- 可以根据实际需求修改 HTML 结构、CSS 样式和 JavaScript 代码。
- 如果需要处理更复杂的规则,可以修改 JavaScript 代码中的重组逻辑。
总结
通过以上步骤,我们可以使用 JavaScript 和 jQuery 实现 DIV 元素的随机重排,并确保重排后的顺序符合预定义的规则。这种方法具有灵活性和可扩展性,可以应用于各种需要动态调整页面元素顺序的场景。 核心在于将DOM元素分离,随机排序,再按照规则组合。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END