【问题标题】:Change view modes with fade-in and fade-out (and set a cookie)使用淡入和淡出更改视图模式(并设置 cookie)
【发布时间】:2013-06-01 13:13:12
【问题描述】:

我需要让用户在List-viewGrid-viewFull-view 之间选择查看模式。基本结构很简单,大概是这样:

<ul>
    <li><a href="#">List Toggle</a></li> 
    <li><a href="#">Grid Toggle</a></li> 
    <li><a href="#">Full Toggle</a></li> 
</ul>

<div id="wrap">
<div id="list-view">
    <div class="line">lorem line</div>
    <div class="line">lorem line</div>
    <div class="line">lorem line</div>
</div>

<div id="grid-view">
    <div class="box">lorem box</div>
    <div class="box">lorem box</div>
    <div class="box">lorem box</div>
</div>

<div id="full-view">
    <div class="full">full lorem</div>
    <div class="full">full lorem</div>
    <div class="full">full lorem</div>
</div>
</div>

这是一个jsfiddle,我从list-view 开始设置为可见,其他设置为隐藏:

http://jsfiddle.net/eTb5C/13/

这是我正在考虑实施的一个,但需要它用于 3 个选项.. http://jsfiddle.net/mgNQy/2/

基本上,如果你点击一个视图模式,当前的视图模式会淡出,而选择的视图模式会淡入。

如果可能的话,我还想添加一个 cookie 来记住用户的偏好,但我不知道该怎么做。我对 jQuery 很陌生,希望我的问题不是太基本。

【问题讨论】:

  • 您的问题是“我如何使用 cookie 来满足用户的偏好?”或“有人可以从头开始编写 jQuery 代码吗?”你试过什么了?你看过.fadeIn().fadeOut()吗?
  • 我确实使用过类似的东西,但您只能交替使用 2 种视图模式...jsfiddle.net/lesson8/TX3G2 我想要 cookie 首选项选项,但抱歉,这应该是一个不同的问题。
  • 这是另一个:jsfiddle.net/mgNQy/2

标签: jquery cookies fadein fadeout setcookie


【解决方案1】:

其实没有什么特别的,你只有三个标签(列表、网格、完整)。 首先,我建议您遵循以下标记:

   <ul class="tabs js-view-mode">
      <li><a href="#list">List</a></li>
      <li><a href="#grid">Grid</a></li>
      <li><a href="#full">Full</a></li>
    </ul>

    <section id="viewMode">
      <div id="list">here is list mode content</div>
      <div id="grid">here is grid mode content</div>
      <div id="full">here is full mode content</div>
    </section>

如您所见,在选项卡上,&lt;a href=""&gt; 类中,我将 id 用于我们想要显示的内容。这是安全和容易的,因为脚本不会混淆他必须展示的内容。

同样在 html 中,您必须加载 jquery 库和 jquery-cookie(您可以避免按照 javascript-cookies 的文档加载此插件)。最好在&lt;/body&gt; 标签之前加载它们,以获得更快的页面加载时间。

您想要的 jQuery 代码如下所示:

$(document).ready(function(){
  var wrap = $('#viewMode'),
      viewMode = $.cookie( 'view-mode' );
  wrap.children().hide();

  $('.js-view-mode').on( 'click', 'a',function( e ){
    e.preventDefault();
    var t = $(this),
        type = t.attr('href');

    $(type).fadeIn()
      .siblings().fadeOut();

    viewMode = $.cookie( 'view-mode', type );

  });

  if ( viewMode ) {
    $('.js-view-mode a[href='+ viewMode +']').trigger('click');
  } else {
    $('.js-view-mode li:first a').trigger( 'click' );
  }

});

你可以看到现场测试here

编辑:JS Fiddle v2(添加活动类+延迟淡入/淡出+点击活动项返回)

【讨论】:

  • 谢谢斯特凡兹!这看起来很棒而且非常简单。当您切换视图模式时,内容会跳起来而不是平滑地淡入淡出,是否有原因?
  • 是的。问题是关于 css 的。你必须把#viewMode position:relative;及其子位置:绝对;顺便说一句,如果你这么认为,请把它作为正确答案
  • 谢谢,我做到了。问题是我的网站是响应式/流畅的,并且添加一个 position:relative 和 absolute 将把它扔掉。是否有可能以另一种方式做到这一点?
  • 暂时我只有这个想法:将 $(type).fadeIn().siblings().fadeOut() 替换为 wrap.children().fadeOut(); $(type).delay(500).fadeIn();无论如何,延迟参数取决于您的内容的长度。任何低于 500 的值都会给您带来一些问题。试试看会发生什么。
  • 不确定您是否会收到这条评论 Stefanz,但我正在尝试这样做,因此如果您单击活动视图模式的锚点,则不会发生任何事情。现在,它将淡出并重新出现..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 2016-02-28
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
相关资源
最近更新 更多