【问题标题】:Fancybox popup once time for sessionFancybox 弹出一次会话
【发布时间】:2020-01-21 00:18:34
【问题描述】:

我在加载页面上有一个带有花式框的弹出窗口。

如果用户更改页面并返回带有弹出窗口的页面没有第二次显示,我需要显示一次弹出窗口。

我读过可以使用 cookie 插件 (https://github.com/carhartl/jquery-cookie),但我不明白如何在此代码中集成...

我有一个简单的 html/css 网站。

这是代码:

<!DOCTYPE html>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js">     </script>
<script type="text/javascript" src="jquery.fancybox-1.3.1.js"></script>
<link rel="stylesheet" type="text/css" href="jquery.fancybox-1.3.1.css" media="screen" />
<script src="jquery.cookie.js"></script>


<script type="text/javascript">
function openFancybox() {
setTimeout(function () {
    $('#yt').trigger('click');
}, 500);
};
$(document).ready(function () {
var visited = $.cookie('visited');
if (visited == 'yes') {
    return false; // second page load, cookie active
} else {
    openFancybox(); // first page load, launch fancybox
}
$.cookie('visited', 'yes', {
    expires: 7 // the number of days cookie  will be effective
});
$("#yt").click(function() {
            $.fancybox({
                    'padding'        : 0,
                    'autoScale'      : false,
                    'transitionIn'   : 'none',
                    'transitionOut'  : 'none',
                    'title'          : this.title,
                    'width'          : 680,
                    'height'         : 495,
                    'href'           : this.href.replace(new RegExp("watch\\?v=", "i"),  'v/'),
                    'type'           : 'swf',
                    'swf'            : {
                        'wmode'              : 'transparent',
                        'allowfullscreen'    : 'true'
                    }
                });
    return false;
});
});
</script>
</head>

<body onload='$("#yt").trigger("click");'>

  <a id="yt" href="https://www.youtube.com/watch?v=ROTYmNckBCw&amp;fs=1&amp;autoplay=1"><img  src="http://fancyapps.com/fancybox/demo/1_s.jpg" alt=""/></a>
</body>
</html>

【问题讨论】:

    标签: javascript jquery cookies popup fancybox


    【解决方案1】:

    为了浏览器的一致性,第一次你可能需要延迟fancybox加载执行,所以试试这个代码:

    function openFancybox() {
        // launches fancybox after half second when called
        setTimeout(function () {
            $('#yt').trigger('click');
        }, 500);
    };
    $(document).ready(function () {
        var visited = $.cookie('visited'); // create the cookie
        if (visited == 'yes') {
            return false; // second page load, cookie is active so do nothing
        } else {
            openFancybox(); // first page load, launch fancybox
        };
        // assign cookie's value and expiration time
        $.cookie('visited', 'yes', {
            expires: 7 // the number of days the cookie will be effective
        });
        // your normal fancybox script
        $("#yt").click(function () {
            $.fancybox({
                // your fancybox API options
            });
            return false;
        });
    });
    

    查看此代码 JSFIDDLE

    注意事项

    【讨论】:

    • jquery.cookie.js 文件够吗?我只添加了这个。我也集成了你的脚本,但我不认为运行,确定我有什么错误......我在第一篇文章中编辑了。
    • @user3519727 :jsfiddle 对你有用吗?如果是这样,那么你真的需要调试你可能做错了什么。是的,jquery.cookie.js 就足够了(当然除了 jQuery 和 fancybox)
    • @user3519727 :顺便说一句,不要在href 内留下空格,就像你上面的代码...watch? v=ROT... 一样
    • 我已经尝试过,并且对 img 没问题。如果我不放视频? cookie 激活了多少次?如果我不会再显示一次视频?也许在 10 分钟后……可能吗?非常感谢
    • 如果我尝试从 youtube 上传视频,会在灯箱中显示一条消息:无法加载请求的内容。请稍后再试。
    【解决方案2】:

    使用您建议的 jQuery cookie 插件:

    $(document).ready(function() {
        if(typeof $.cookie('popupVideoPlayed') == 'undefined') {
            $.cookie('popupVideoPlayed', 'true'); // set a session cookie so it won't play again
            $('#yt').trigger('click');
        }
    });
    

    记得删除内联正文 onload 事件处理程序。

    【讨论】:

    • 对不起,我无法使用 jquery。我已经使用您的代码和指向 cookie.js 的链接进行了编辑,但没有运行,我必须如何删除内联正文 onload???
    • 使body标签看起来像,并将代码放在click事件处理程序之后。
    • 我已编辑。但是在这种情况下,弹出窗口永远不会启动。
    • 很可能已经设置了cookie。打开浏览器开发者工具(通常是 F12)并删除它,然后重试。
    【解决方案3】:

    ¡已更新!

    如果您使用的是最新的 JavaScript Cookie plugin,这是给您的:

    HTML

    <a class="c-p" href="#cookies" style="display: none;">Inline</a>
    <div id="cookies" style="display: none;">
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos rem nulla quae dolorum omnis possimus, ducimus nisi pariatur harum debitis quo, excepturi nam ratione modi. Architecto, enim. Amet, saepe mollitia?</p>
    </div>
    

    JavaScript

    function openFancybox() {
        setTimeout( function() {jQuery('.c-p').trigger('click'); },1500);
    }
    jQuery(document).ready(function() {
        if (Cookies.get('visited')) {
            return false;
        } else {
            Cookies.set('visited', 'no', { expires: 7 });
        } 
        if (Cookies.get('visited') == 'yes') {
            return false;
        } else {
            openFancybox();
            Cookies.set('visited', 'yes');
        }
        jQuery('.c-p').fancybox();
    });
    

    注意:我在我的自定义 WordPress 主题中实现了它,并且效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      相关资源
      最近更新 更多