【问题标题】:Use cookies to toggle body class使用 cookie 切换 body 类
【发布时间】:2017-06-13 21:42:12
【问题描述】:

我一直在为此苦苦寻找可行的解决方案。 目标是为视力不佳的人创建一个文本大小切换器。 我创建了三个 span 元素,分别是 small、medium 和 large 类。

我有一段代码几乎可以完成工作,但它需要那个 cookie 部分。

$(function() {
    $(".font-toggle span").click(function() {
        var size = $(this).attr('class');
        $("body").attr("id", size);
        return false;
    });    
});

如何使用 cookie 来保存我的选择并在页面刷新后添加它? 已经阅读了许多关于设置 cookie 的 stackoverflow 帖子,但它们都只有一个切换功能。我这里有三个。

JSFIDDLE HERE

非常感谢!

【问题讨论】:

    标签: javascript jquery cookies


    【解决方案1】:

    $(document).ready(function(){
        $(".font-toggle span").click(function() {
            var size = $(this).attr('class');
            $("body").attr("id", size);
            if($.cookie('mycookie') == 'valueOfCookie'){
               $.cookie('mycookie', '');
            }
            else{
              $.cookie('mycookie', 'valueOfCookie');
            }
            
            return false;
        }); 
        if($.cookie('mycookie') == 'valueOfCookie'){
           $("body").attr("id", 'big-font');
        }
        else{
          $("body").removeAttr("id");
        }
    });
    #big-font{
      font-size: 40px;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script type="text/javascript" src="https://github.com/carhartl/jquery-cookie/releases/download/v1.4.1/jquery.cookie-1.4.1.min.js"></script>
    
    
    <div class="font-toggle">
      <span class="big-font">
       Button
      </span>
    </div>
    <div>
      Text To Show
    </div>

    【讨论】:

    • 这仅适用于一个切换。我需要在每次课程切换后清除并添加一个新的 cookie。如果我单击 span.small 我将 cookie 设置为小,在我单击 span.large 后我会删除以前的 cookie small 并将其重置为 large。现在它不是我想要的。
    【解决方案2】:

    也许这对你有用。

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script type="text/javascript" src="https://github.com/carhartl/jquery-cookie/releases/download/v1.4.1/jquery.cookie-1.4.1.min.js"></script>
    <script>
      "use strict";
    
    
      $(document).ready(function() {
        let eyesight = $.cookie('eyesight');
    
        if (eyesight != undefined) {
          $("body").addClass(eyesight);
        } else 
          setEyesight('medium'); // Default size
    
        $(".font-toggle span").click(function() {
          setEyesight($(this).attr('class'));
        });
      });
    
    
      function setEyesight(size) {
        let eyesight = $.cookie('eyesight');
    
        if (eyesight != undefined) {
          $("body").removeClass(eyesight);
          $.removeCookie('eyesight');
        }
    
        $("body").addClass(size);
        $.cookie('eyesight', size);
      }
    </script>
    

    【讨论】:

    • 是的,这几乎可以按预期工作。但是,奇怪的是,如果通过跨度单击设置大,它可以工作。页面刷新后,仍然有效。现在,在单击其他类后,小,它会删除大类并设置小类。现在页面更改后,上一课回来了,大课。每个页面都有自己的类。我可以为整个域设置一个全局 cookie 吗?
    • 总是为整个域设置好 cookie。您确定每个页面都包含此脚本吗?
    • 还是一样,如果一个页面有“中”类,那么在它们之间切换后其他页面可以有“大”。就像删除 cookie 永远不会被删除。
    【解决方案3】:

    这个呢?

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script type="text/javascript" src="https://github.com/carhartl/jquery-cookie/releases/download/v1.4.1/jquery.cookie-1.4.1.min.js"></script>
    <script>
      "use strict";
    
      $(document).ready(function() {
        let eyesight = new Eyesight();
        eyesight.initialize();
    
        $(".font-toggle span").click(function() {
          eyesight.set($(this).attr('class'));
        });
      });
    
      function Eyesight() {
        let self = this;
        let name = "eyesight";
        let current = null;
        let _default = "medium";
        let data = $.cookie(name);
    
        // initialzie
        this.initialize = function() {
          if (data!= undefined) {
            $("body").addClass(data);
            current = data;
          } else 
            self.set(_default); // Default size
    
          // init cookie listener
          self.listener();
        };
    
        // set eyesight function
        this.set = function(size) {
          if (data != undefined) {
            $("body").removeClass(data);
            $.removeCookie(name);
          }
    
          $("body").addClass(size);
          $.cookie(name, size);
          current = size;
        };
    
        // eyesight cookie listener function
        this.listener = function() {
          setTimeout(function() {
            let cookie = $.cookie(name);
    
            if (cookie != undefined && cookie != current)
              self.set(cookie);
    
            self.listener();
          }, 100);
        };
      }
    </script>
    

    【讨论】:

    • 这有点好,但仍然无法正常工作。也许一个例子会有所帮助? eesti.ee/eng 在此页面中,有一个“视障人士”链接可以切换菜单,里面有我的网站需要的类似功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多