首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从具有相同类的多个元素中获取随机元素

如何从具有相同类的多个元素中获取随机元素
EN

Stack Overflow用户
提问于 2019-10-22 16:05:47
回答 1查看 182关注 0票数 2

我有一个包含一些虚假销售通知元素的列表。它们都有相同的类。使用我得到的代码,所有通知都会同时显示,但每次我只需要显示一个随机通知。我该怎么做呢?

这是我目前的代码:

PHP来生成元素:

代码语言:javascript
复制
$notification .= '
<section class="custom-social-proof">
  <div class="custom-notification">';
    // Get fake sale notification info
    $specarticles = '
    SELECT
    c.alias as content_alias,
    c.title as content_title,
    c.catid,
    c.state,
    c.featured,
    c.images,
    ca.id,
    ca.published,
    ca.title as cat_title,
    ca.alias as cat_alias
    FROM snm_content c
    LEFT JOIN snm_categories ca
    ON c.catid = ca.id
    WHERE c.featured = 1
    AND c.state = 1
    AND ca.published = 1';
    $specarticlescon = $conn->query($specarticles);
    while($specarticles = $specarticlescon->fetch_assoc()){

        $imagesjson = json_decode($specarticles['images']);

        if(!empty($imagesjson->image_intro)){
            $image = 'https://website.nl/cms/'.$imagesjson->image_intro;
        }else{
            $image = '';
        }

        $notification .= '
        <div class="custom-notification-container">
            <div class="custom-notification-image-wrapper">
                <img src="'.$image.'">
            </div>
            <div class="custom-notification-content-wrapper">
                <p class="custom-notification-content">
                    Piet De Graaf - Spijkenisse<br>reserveerde <a href="'.$specarticles['cat_alias'].'/'.$specarticles['content_alias'].'">'.$specarticles['content_title'].'</a>
                    <small>vandaag</small>
                </p>
            </div>
        </div>';
    }
    $notification .= '
        <div class="custom-close"></div>
    </div>
</section>';

echo $notification;

还有我的jquery:

代码语言:javascript
复制
setInterval(function(){ tpj(".custom-social-proof").stop().slideToggle('slow'); }, 8000);
 tpj(".custom-close").click(function() {
   tpj(".custom-social-proof").stop().slideToggle('slow');
 });

我发现你可以用eq得到一些随机的东西。因此,我尝试了以下方法:

代码语言:javascript
复制
var len = tpj(".custom-social-proof").length;
var random = Math.floor( Math.random() * len ) + 1;
setInterval(function(){ tpj(".custom-social-proof").eq(random).stop().slideToggle('slow'); }, 8000);
 tpj(".custom-close").click(function() {
   tpj(".custom-social-proof").stop().slideToggle('slow');
 });

但这会完全阻止通知的显示。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-22 16:47:16

你需要在setInterval中随机传递,并隐藏所有被切换的相同类元素。

请试一试。现在你需要检测元素是否已经被切换了。

代码语言:javascript
复制
var len = $(".custom-social-proof").length;
var random = 0;

setInterval(function(){ 
  random = Math.floor( Math.random() * len ) ;
  $(".custom-social-proof").hide('slow');
  $(".custom-social-proof").eq(random).stop().slideToggle('slow'); 
}, 1000);
代码语言:javascript
复制
.custom-social-proof{
  display:none;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<section class="custom-social-proof">1</section>
<section class="custom-social-proof">2</section>
<section class="custom-social-proof">3</section>
<section class="custom-social-proof">4</section>
<section class="custom-social-proof">5</section>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58499682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档