【问题标题】:Selecting div in li element and do action on li-click在 li 元素中选择 div 并在 li-click 上执行操作
【发布时间】:2013-03-07 00:04:04
【问题描述】:

我认为我在选择时遇到了问题。实际上我有一个 div 包含两个相同大小的其他 div(正面和背面)。我想创建一个点击事件,就像拥有一张卡片的两面一样。没有翻转效果,只需要在点击时覆盖/显示。

我的 html 与此相关:

enter code here`enter code here`<ul id="boxes">
    <li></li>
    <li></li>
    <li></li>
    <li class="rotate">
<div class="flip-container">
<div class="front">
<img src="kuh.jpg">
</div>  
<div class="back">
<p>Oohh...behave!"Austin Powers"</p>
</div>
</div>      
</ul>

enter code here$(function() {

这将是 jQuery。添加类“goaway”在 z-index -2 上设置相应的元素,从而显示背后的 div。我试过用 CSS 设置它。

$("#boxes li").on("click", function(){
    if($(this).next(".front").hasClass("goaway")){
        $(this).next(".front").removeClass("goaway");
    }else{
        $(this).next(".front").addClass("goaway");  
    }
}); 

感谢您提供任何有用的链接。我确信这是正确的方向,但不知道为什么它不起作用。

BR

带有fadeToggle、delay 和clearQueue 和stop 的新JS。

$(function() {$("#boxes li").on("click", 
function(){$(this).find(".front,.back").clearQueue().stop().fadeToggle(800)
.delay(10000).fadeToggle(800);});});

当更频繁地点击 li 时,它会按预期中止该功能,但在 10 秒延迟后切换到后面。我认为它会放弃每一步,因此应该显示正面。

【问题讨论】:

    标签: jquery events dom select


    【解决方案1】:

    带有所需 CSS 的工作演示以显示其正常工作 http://jsfiddle.net/VRu6X/1/

    需要少量的 jQuery

    $("#boxes li").on("click", function(){
        $(this).find('.front,.back').toggleClass('goaway');
    }); 
    

    HTML,需要从上课开始

    <ul id="boxes">
        <li class="rotate">
            <div class="flip-container">
                <div class="front">
                    FRONT
               </div>  
                <div class="back goaway">
                    BACK
                </div>
            </div>      
        </li>
    </ul>
    

    编辑

    “还有一件事,由于过渡非常粗糙,我一直在寻找一种更顺畅地切换类的选项。我可以在你的解决方案上应用一些淡化吗?”

    您可以更流畅地显示和隐藏
    设置回不显示

        <div class="flip-container">
            <div class="front">
                FRONT
           </div>  
           <div class="back" style="display:none">
                BACK
           </div>
        </div>
    

    并使用fadeToggle() http://jsfiddle.net/VRu6X/2/
    slideToggle() 或者http://jsfiddle.net/VRu6X/3/

    $("#boxes li").on("click", function(){
        $(this).find('.front,.back').fadeToggle(1000);
    }); 
    

    或者,您可以翻转卡片http://jsfiddle.net/VRu6X/5/

    <ul id="boxes">
        <li class="rotate">
            <div class="flip-container">
                <div class="front">
                    <img src="http://www.madore.org/~david/images/cards/english/king-clubs.png" />
               </div>  
               <div class="back" style="display:none;">
                    <img src="http://chetart.com/blog/wp-content/uploads/2012/05/playing-card-back.jpg" />
                </div>
            </div> 
        </li>
    </ul>
    

    CSS

    #boxes li{
        display:block;
    }
    .flip-container{
        position:relative;
    }
    .flip-container div{
        z-index:2;
        position:absolute;
        height:200px;
        width:130px;
    }
    
    .front img, .back img{
        width:100%;
        height:100%;
    }
    

    JS

    $("#boxes li").on("click", function(){
        //$(this).find('.front,.back').slideToggle(500);
        var $showing=$(this).find('.front:visible, .back:visible');
        var $notshowing=$(this).find('.front:not(:visible), .back:not(:visible)')
        $showing.animate({height:0, marginTop:100}, 300, function(){
            $(this).hide();
            $notshowing.show().css({height:0, marginTop:100}).animate({height:200, marginTop:0}, 300);
        });
    }); 
    

    请注意 jQuery 中的高度和边距是设置的,而不是被查找的,所以如果你更改 CSS,你必须将其更改为,或者以正确的方式进行(让 jQuery 第一次发现高度)

    【讨论】:

    • 谢谢,效果很好。你能告诉我为什么我的代码不起作用吗?对我来说,它看起来很好,而且很合乎逻辑。提前致谢
    • 还有一件事,由于过渡非常艰难,我一直在寻找一种更顺畅地切换课程的选项。我可以在没有 UI 的情况下对您的解决方案应用一些淡化吗?我尝试的是在 toggleClass 中简单地设置“慢”,但它不起作用! THX
    • OK .... 正如你的小提琴证明它有效,我相信你虽然我无法在第一次运行时在我的代码中设置它。我会稍微调整一下……这正是我想要的。我渴望学习的最后一件事:我的初始代码出了什么问题?
    • 编辑:它工作得很好。唯一剩下但最有趣的是关于为什么我的代码不起作用的知识转移。谢谢
    • $(this).next(".front") 查看 jQuery 文档以了解 .next() 的作用。它没有.find()
    【解决方案2】:

    您是否尝试过重置 z-index?

    .comehere { z-index: 2; }

    $(document).on('click', '.flip-container', function() {
        $(this).child('.front').toggleClass('comehere').toggleClass('goaway');
    }
    

    【讨论】:

    • 既然你从我的回答中得到了提示.toggleClass('comehere goaway')
    • 直到我完成编辑才注意到你这样做了,但是是的。
    • 您好,感谢您的帮助。然而,这种方法并没有奏效。因此,我坚持@popnoodles 的第一个答案,这很好。问候
    猜你喜欢
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2015-04-01
    相关资源
    最近更新 更多