如何使JS水平内容从px滑动到%响应

这让我很生气:我有一点点jquery水平滑动三个div。

小提琴

编辑3: 现场演示; 完整的网站显示我希望它如何工作 .. 直到我达到低于775px。 请调整窗口大小以查看我的意思。

编辑,受欢迎的需求。 我想要的是:在小屏幕上,比如700以下。 我想要一个面板填满屏幕。 一次。

2ND编辑: 在700px以上工作正常。 在那之下; 我希望屏幕一次只显示一个面板,当需要时(点击当前面板),下一个面板将向侧面滑动。 即没有堆叠列,这是经典的响应式设计。 请看小提琴。 在您最小化浏览器窗口或使用移动设备之前,这一切都很好。

我将panel1和panel2定义为fixed width ,并使用css calc将第三个面板保持为100%减去panel1(200px)和panel2(200px):( (calc 100% - 400px)

这很好用,直到我进入小屏幕。 然后它变得混乱:面板垂直堆叠在一起(我想隐藏面板不活动),并且由于固定的宽度,我“看到”右边的一小块压扁面板。 理想情况下,我希望每个面板100%填充小屏幕。

我需要帮助的是:

我必须要么

  1. 找到一种方法来替换这个JS定义的像素滑动距离%

  var margins = { panel1: 0, panel2: -200, panel3: -400, } 

..因此能够做我的css计算(100% – 20%)或类似的东西。

  1. ..或者,至少,在小屏幕中找到隐藏面板的方法。

所有指针都非常感谢。

您可以在此处阅读有关TB3网格的更多信息: http : //getbootstrap.com/css/#grid

另请阅读: Twitter的Bootstrap mobile:更多列和Twitter的Bootstrap 3网格,更改断点并删除填充

你需要这样的东西:

 
Panel 1
Panel 2
Panel 3

在768像素以下,您的列将堆叠(100%屏幕宽度),由col-sm-4 。 在767像素以上,您可以使用媒体查询为您的面板提供固定宽度:

 @media (min-width: 768px) { .panel {width:200px} } 

更新 (根据评论)如下。

试试这个: http : //bootply.com/73541

CSS

 @media (max-width: 767px) { #panel1 {visibility:visible} #panel2 {visibility:hidden} #panel3 {visibility:hidden} } @media (min-width: 768px) { #menu {visibility:hidden} } 

JavaScript的

 function showandhide(show) { $('.panel').hide(); $('#' + show).css('visibility','visible').slideDown("slow"); } $('.panellink').click(function() { showandhide($(this).attr('rel')) return false; } ); 

HTML

  
Panel 1
Panel 2
Panel 3

根据响应更新2

1)在767像素上方,所有面板都显示在我的示例中。 当您从小到大resize时,您将不得不重新加载页面。 也可以使用$(window).resize()来触发重新加载,注意某些浏览器会触发两次,请参阅https://stackoverflow.com/a/4298653/1596547以获得解决方案

2)对于“侧向滑动”重写这个: http : //jsfiddle.net/ax4AC/2/ :

  $('.panel').css('margin-left','-260px').hide(); $('#' + show).css('visibility','visible'); $('#' + show).show(); $('#' + show).animate({ 'margin-left': parseInt($('#' + show).css('margin-left'), 10) == 0 ? -$('#' + show).outerWidth() : 0, opacity: "show" }); 

HTML(新)

  
Panel 1
Panel 2
Panel 3

javascript(新)

 function showandhide(show) { // source: http://jsfiddle.net/ax4AC/2/ $('.panel').css('margin-left','-260px').hide(); $('#' + show).css('visibility','visible'); $('#' + show).show(); $('#' + show).animate({ 'margin-left': parseInt($('#' + show).css('margin-left'), 10) == 0 ? -$('#' + show).outerWidth() : 0, opacity: "show" }); //.slideDown("slow"); } $('.panellink').click(function() { showandhide($(this).attr('rel')) return false; } ); //source timeout: https://stackoverflow.com/a/4298653/1596547 var id; $(window).resize(function() { clearTimeout(id); id = setTimeout(doneResizing, 500); }); function doneResizing() { if($(window).width()>=768) { $('.panel').css('display','block'); $('.panel').css('visibility','visible'); $('.panel').css('margin-left',0); } } 

css(新)

 @media (max-width: 767px) { .panel{ margin-left: -260px; } #panel1 {visibility:visible; margin-left:0} #panel2 {visibility:hidden} #panel3 {visibility:hidden} } @media (min-width: 768px) { #menu {visibility:hidden} .panel {display:block; visibility:visible; margin-left:0} } 

见: http : //bootply.com/73715 (新!!)

从我对你的问题的理解,你遇到了panel3的问题。 你可以用来避免这种烦恼。检查现场演示

 .panel1, .panel2, .panel3 { float: left; height: 800px; padding: 5px ; overflow: none; }