【问题标题】:modal pop up to be displayed when the page is scrolled to 50px当页面滚动到 50px 时弹出模态框
【发布时间】:2017-07-31 10:15:13
【问题描述】:

当用户点击关闭弹出窗口后,当点击弹出窗口关闭时,我使用 cookie 存储值,弹出窗口不应再次显示。但我在这方面遇到了问题。每当我滚动时,弹出窗口就会打开,即使我已经关闭它。

<div id="fsModal" class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
    <div class="modal-content">
    <button type="button" id="cross-btn" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <div id="desk-view" class="modal-body">
            <div id="pop-up" class="row">   
                <div class="arrow_box side-heading col-xs-5 col-sm-5">
                    <h3>Join the Movement, the newsletter that tackles the justice issues that matter to you most.</h3>
                </div>
                <div class="right-form col-xs-7 col-sm-7">
                    <form class="form-inline subscribe-form">
                        <div class="form-group">
                            <input class="email-popup" placeholder="Enter your email" name="email-input">
                            <button class="btn-form">Sign up</button>
                        </div>
                    </form> 
                </div>
            </div>
        </div>
        <div id="mobil-view" class="modal-body">
            <div class="pop">
                <div class="side-heading">
                    <h3>Join the Movement, the newsletter that tackles the justice issues that matter to you most.</h3>
                </div>
                <div class="right-form">
                    <form class="form-inline subscribe-form">
                        <div class="form-group">
                            <input class="email-popup" placeholder="Enter your email" name="email-input">
                            <button class="btn-form">Sign up</button>
                        </div>
                    </form> 
                </div>
            </div>
        </div>
    </div>
</div>

$('#fsModal').on('hidden.bs.modal', function (e) {
        $.cookie('close_popup' , '10' ,  { expires : 7 });
    });

    var scroll_function = getCookie("close_popup");

    $(window).scroll(function(){
        if (scroll_function == " ") {
            if ($(this).scrollTop() >= 50) {
                $("#fsModal").modal('show');
            }
        }
    });

【问题讨论】:

  • 你确定你在关闭弹出窗口并滚动到 50 后获得了 scroll_function 的价值
  • 这是我认为我没有从中获得价值的问题
  • 你为什么要使用cookies,看看我的回答
  • 我正在尝试将点击值存储在 cookie 中。
  • 好的,尝试使用 cookie 或本地存储,只要您可以通过变量处理代码。它会创建不必要的 http 流量。

标签: javascript jquery html twitter-bootstrap-4


【解决方案1】:

您可能想尝试一下,为什么要为此使用 cookie?

var ClosePopUp = false;

$('#fsModal').on('hidden.bs.modal', function (e) {
      ClosePopUp = true;
    });


    $(window).scroll(function(){
            if ($(this).scrollTop() >= 50 && ClosePopUp == false) {
                $("#fsModal").modal('show');
            }else {
 $("#fsModal").modal('hide');
}
    });

【讨论】:

  • 很高兴为您提供帮助 :)
  • 使用 cookie 的主要原因是因为我在我的 wordpress 网站中使用此弹出窗口进行项目。如果我使用 cookie 意味着弹出窗口只会在用户进入页面时出现一次。但我这里有个小问题。我已经实现了上面的代码,然后问题是弹出窗口显示在我网站的每个页面或帖子中。我希望这只出现在主页上一次,而不是所有页面。你能帮我解决这个问题吗?
  • 在这种情况下,您需要有 cookie 或本地存储,请参阅我的替代方法。
【解决方案2】:

我为此使用了 jQuery 插件(jQuery cookie),您可以从 https://github.com/js-cookie/js-cookie 获得相同的结果

在主页加载事件中首先将 cookie 设置为 false

 Cookies.set('ClosePopUp', 'false'); // set this only on home page load event

那么你需要在你的关闭模型上设置 Cookies

$('#fsModal').on('hidden.bs.modal', function (e) {
     Cookies.set('ClosePopUp', 'true');
    });

在你的卷轴上检查相同的

 $(window).scroll(function(){
            if ($(this).scrollTop() >= 50 && Cookies.get('ClosePopUp') != 'true' ) {
                $("#fsModal").modal('show');
            }else {
 $("#fsModal").modal('hide');
}
    });

最后在您的注销时删除 cookie..

Cookies.remove('ClosePopUp');

==== 为以前版本的 Cookies.js 编辑 =====

在主页加载事件中首先将 cookie 设置为 false

$.cookie('ClosePopUp', 'false',{ path: '/' }); // set this only on home page load event

那么你需要在你的关闭模型上设置 Cookies

$('#fsModal').on('hidden.bs.modal', function (e) {
      $.cookie('ClosePopUp', 'true',{ path: '/' });
    });

在你的卷轴上检查相同的

 $(window).scroll(function(){
            if ($(this).scrollTop() >= 50 && $.cookie('ClosePopUp') != 'true' ) {
                $("#fsModal").modal('show');
            }else {
 $("#fsModal").modal('hide');
}
    });

最后在您的注销时删除 cookie..

$.removeCookie('ClosePopUp');

【讨论】:

  • 它没有给我结果。这次甚至没有显示弹出窗口
  • Uncaught ReferenceError: Cookies is not defined at (index):658
  • 确保您引用的 jQuery Cookie .js 文件是来自我已发表评论的站点的最新版本,您已在将 jQuery 包含到项目后设置了顺序。
  • 这是我的 jquery.cookie.js 文件 * jQuery Cookie Plugin v1.4.0 * github.com/carhartl/jquery-cookie * * 版权所有 2013 Klaus Hartl * 在 MIT 许可下发布。但我无法更改此文件。
  • 这是问题所在,api最近发生了变化,没关系我会为1.4编辑我的帖子
【解决方案3】:

试试这个:

HTML:

<input type="hidden" id="is_close" value="0">

<div id="dialog">

</div>

jquery:

$(window).on('scroll', function() {
    scrollPosition = $(this).scrollTop();
  if(scrollPosition > 50 && $('#is_close').val() == 0 )
  {
    $('#dialog').dialog({
      buttons: [
        {
          text: "Close",
          click: function() {
            $( this ).dialog( "close" );
            $('#is_close').val('1');
          }
        }
      ]
    });
  }
});

Working Fiddle

【讨论】:

  • 它的引导模式不是对话框
  • 这只是一个示例,您可以使用任何类型的弹出窗口代替 Jquery UI 对话框。 OP 问题不是弹出窗口的类型。
  • 好的,但是当你可以在简单的 js 变量中处理它时,为什么你需要隐藏输入呢?只是出于好奇..
  • 即使我关闭了它,每次滚动都会弹出弹出窗口。它不适合我。
猜你喜欢
  • 2012-04-16
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
相关资源
最近更新 更多