【问题标题】:How to show DIV on first visit and not any visit after until browser is closed如何在第一次访问时显示 DIV 而在浏览器关闭之前不显示任何访问
【发布时间】:2014-11-01 18:43:46
【问题描述】:

我有以下脚本,它从右侧滑入/滑出 DIV:

// jQuery 1.9 > Toggle Event dep 1.8
$('#slideClick').click(function () {
    var it = $(this).data('it') || 1;
    switch (it) {
        case 1:
            $(this).parent().animate({ right: '-290px' }, { queue: false, duration: 500 });
            $("#imgArrow").attr("src", "../theImages/arrow_expand.png");
            break;
        case 2:
            $(this).parent().animate({ right: '-0px' }, { queue: false, duration: 500 });
            $("#imgArrow").attr("src", "../theImages/arrow_collapse.png");
            break;
    }
    it++;
    if (it > 2) it = 1;
    $(this).data('it', it);
});

MasterPage中对应上述脚本的HTML代码为:

<div id="slideOut" class="clearfix">
    <div id="slideContent">
        <div style="width: 98%; margin: 0 auto; padding: 5px;">
            <div id="dvImpMsgs" style="padding-left: 10px; padding-right: 10px;">
                <asp:UpdatePanel runat="server" ID="upMessage" ClientIDMode="Static" UpdateMode="Conditional">
                    <ContentTemplate>
                        <asp:Label ID="lblMessage" Font-Size="x-small" runat="server" Text="" ClientIDMode="Static"></asp:Label>
                    </ContentTemplate>
                </asp:UpdatePanel>
            </div>
        </div>
    </div>
    <div id="slideClick">
        <div style="padding: 0; margin: 0 auto; width: 100%; height: 100%; text-align: center;">
            <div class="arrowMsg">
                <img src="../theImages/arrow_collapse.png" id="imgArrow" style="width: 12px; height: 18px; border: 0; vertical-align: middle;" />
            </div>
            <div style="width: 80px; height: 50px; float: right; margin: 0; padding: 0;">
                <div style="width: 80px; height: 30px; text-align: center; line-height: 30px; vertical-align: middle;" class="brClear">
                    <img src="../theImages/iMsg.png" style="width: 30px; height: 30px; border: 0" />
                </div>
                <div style="color: #FFFFFF; width: 80px; height: 20px; text-align: center; line-height: 20px; vertical-align: middle; font-size: 10px;" class="brClear">
                    MESSAGES
                </div>
            </div>
        </div>
    </div>
</div>

每次用户访问页面时,滑出都是真实的,这会迫使用户单击slideclick DIV 将其关闭,这可能对用户不友好。

如何使用 cookie 或会话,以便发生以下情况:

用户第一次访问时,会在滑出位置显示 DIV,一旦他们单击 slideclick DIV 以隐藏。它将继续对用户隐藏,直到浏览器关闭,在这种情况下,一旦用户再次重新打开浏览器,DIV 应该处于滑出位置,直到用户单击 slideclick DIV 隐藏,并且以此类推。

滑出位置:

隐藏位置:

【问题讨论】:

    标签: jquery html css asp.net


    【解决方案1】:

    根据评论更新答案

    如果您知道您的浏览器支持它,您可以使用sessionStorage 代替数据元素。另外为了让它更干燥,我添加了额外的功能。你会像这样使用它:

    $(function() {
      function showContent(dir) {
        var pxVal = '0px', img='arrow-collapse';
        if (dir === 'close') {
            pxVal = '-290px';
            img = 'arrow-expand';
        }
        $('#slideOut').animate({ right: pxVal }, { queue: false, duration: 500 });
        $("#imgArrow").attr("src", "../theImages/"+img+".png");
      }
    
      function showHideContent () {
        var currVal = sessionStorage.getItem('showSlideArea');  
        if (currVal === 'false') {
            showContent( 'close');
            currVal='true';
        } else {
            showContent( 'open');
            currVal='false';
        }
        sessionStorage.setItem('showSlideArea', currVal);
      }
    
      $('#slideClick').on('click', showHideContent);
    
      var currVal = sessionStorage.getItem('showSlideArea');  
      if (currVal === 'true') {
        showContent('close');
      }
    });
    

    【讨论】:

    • 当用户在网站上时,这将持续整个会话。一旦他们的会话过期,存储项目也将过期。
    • sessionStorage 直到浏览器关闭我猜?我将使用 IE 9/10 和 Chrome,是否支持 sessionStorage?如何强制清除sessionStorage
    • 谢谢,但这对我不起作用。编辑代码后,slideContent 将不再关闭:/
    • 更新小提琴:jsfiddle.net/7yruxdeq/1 IE9/10 和 Chrome 都支持 sessionStorage。它一直持续到浏览器关闭或会话过期(由服务器配置决定)。没有必要“清除”它。您可以随时使用“setItem”更改值,并随时使用“getItem”获取值。
    • 发生的情况是,第一次默认打开。我单击它关闭并访问另一个内容页面并再次单击该框,没有任何反应,再次单击它,没有任何反应,第三次单击它打开,关闭也是如此。
    【解决方案2】:

    在 asp.net 代码中

    使变量称为 ex。 requestNumber 并将其存储在会话中

    在每个请求中为 +1 赋值

    Div "slideClick" 添加类,requestNumber ex slideClick.Attributes["class","request_"+requestNumber]

    在 CSS 中

    slideClick{显示:隐藏;} slideClick.request_1{display:block;}

    更新 1

    你也可以使用

    Request.UrlReferrer

    如果访问者来自不是您的网站或 null,则指定要出现的类

    点击网站内的任何链接后,UrlReferrer 将成为您的网站,然后不指定类出现。

    终于

    根据从 UrlReferrer、cookie 或会话中获取的值,将类添加到您想要出现/消失的 div,如上所述

    更新 2

    如果你坚持你的范围,试试这个

    var it = sessionStorage.getItem('it') || 1;
    if(it > 1) {
        $('#slideClick').parent().animate({ right: '-290px' }, { queue: false, duration: 0 });
        $("#imgArrow").attr("src", "../theImages/arrow_expand.png");
    }
    
    //var it = $('#slideClick').data('it') || 1;
    alert(it);
    // jQuery 1.9 > Toggle Event dep 1.8
        $('#slideClick').click(function () {
    
            alert(it);
            switch (it) {
                case 1:
                    $(this).parent().animate({ right: '-290px' }, { queue: false, duration: 500 });
                    $("#imgArrow").attr("src", "../theImages/arrow_expand.png");
                    break;
                case 2:
                    $(this).parent().animate({ right: '-0px' }, { queue: false, duration: 500 });
                    $("#imgArrow").attr("src", "../theImages/arrow_collapse.png");
                    break;
            }
            it++;
            if (it > 2) it = 1;
            sessionStorage.setItem('it', it);
        });
    

    这里的想法是检查值 onload 而不是等待点击。

    问候

    【讨论】:

    • slideClick 是用户点击打开slideContent的橙色部分
    • 我在所有网站中总是看到的是slideContent总是默认出现特别是对于SEO,slideClick出现在所有内容之上,你关闭它可以看到里面的所有内容,所以不要让你的内容依赖在 javascript 上对搜索引擎更友好。
    • 我完全同意你的观点,它正在这样做,我想保持相同的功能。我要做的是在第一次访问时显示并继续显示它直到我隐藏它。之后,每次我访问该页面时,它都会继续隐藏它,直到我再次打开它。
    • 看起来它正在工作:) 我会先做一个测试。谢谢
    • 它正在处理一个小错误...当我第一次访问该页面时,我单击 slideClick 关闭 dIV,当我转到另一个页面时,DIV 保持隐藏但现在我有了点击slideClick 三次即可打开,反之亦然。知道如何解决吗?
    【解决方案3】:

    通过 jquery 设置 cookie。

    检查这个答案:https://stackoverflow.com/a/8213459/4016757

    或者直接进入插件: https://github.com/carhartl/jquery-cookie

    【讨论】:

      猜你喜欢
      • 2011-09-01
      • 2013-09-25
      • 1970-01-01
      • 2014-04-23
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多