jquery - 如何在两个基于 Jquery 的布局之间切换(使用桌面和移动设备时)

标签 jquery layout jquery-mobile responsive-design enquire.js

我想创建一个响应式网站。 如果浏览器是移动大小的,则内容应以 iPhone 样式 ListView 显示 如果浏览器是桌面大小的,则内容应使用选项卡显示:

enter image description here

执行此操作的最佳方法是什么? 我不想为移动/桌面使用单独的文件。我希望它具有响应能力。

<小时/> <小时/> <小时/>

这是我所做的一些研究。

尝试 1:纯 CSS 解决方案。

纯 CSS 解决方案将是最好的,因为 CSS 提供媒体查询,可以轻松在布局之间切换。 CSS offers methods for creating tabs 。但它似乎没有提供 iPhone 风格列表的方法。 (您几乎可以使用 accordion list 来伪造它,但这不会像真正的 iPhone 应用程序那样将用户带到单独的页面)。

尝试 2:Jquery 解决方案 ( see Fiddle )

In this fiddle ,我尝试过将 Jquery Mobile 和 Jquery Ui 结合起来。 Enquire.Js用于根据屏幕调用必要的库。

当一个库被调用时,它会改变 dom 结构。因此,不需要的库必须被删除,否则如果用户调整浏览器大小(即在移动桌面之间切换),未使用的库将崩溃,导致调用的库发生冲突。

在我的 fiddle 中,我尝试这样做,但它似乎不起作用:

$(document).ready(function() {

        enquire.register("screen and (max-width: 600px)", function() {
    $('script[src~="jquery-ui.js"]').remove();
    $('link[rel=stylesheet][href~="jquery-ui.css"]').remove();    
     $('head').append('<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" />');    
     $('head').append('<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"><\/script>');   
        $("#tabs").tabs("destroy");            
    }).listen();


       enquire.register("screen and (min-width: 601px)", function() {
    $('script[src~="jquery.mobile-1.0a3.min.js"]').remove();
    $('link[rel=stylesheet][href~="jquery.mobile-1.0a3.min.css"]').remove();    
    $('head').append('<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/base/jquery-ui.css" />');        
     $('head').append('<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"><\/script>');    
    $("#tabs").tabs();

    }).listen();

});

即使删除了未使用的库,也会导致新库发生冲突。 此外,在调用任何布局之前,您必须重新调整浏览器的大小。如果用户不重新调整浏览器大小,内容将没有样式。

尝试 3:Dom 克隆 ( see Fiddle )

此尝试与尝试 2 类似,只不过在页面加载时它将 DOM 存储在变量中。然后,当用户重新调整浏览器大小时,现有 DOM 会被存储的 DOM 替换。我遵循了方法大纲here ,但似乎不起作用。 dom 只是被删除而不是被替换。

如果有任何帮助,我将不胜感激,因为我一直在努力寻找解决方案! (我知道我已经问过与此类似的问题,但我觉得这个新问题足够不同,值得发表新帖子。)

尝试 4:动态分配数据属性

Jquery mobile 使用标记中的数据属性来使脚本正常工作。我尝试过动态应用这些,因此仅当浏览器处于移动尺寸时它们才会写入文档。然而,当浏览器调整大小时,桌面选项卡仍然损坏。

最佳答案

我认为没有必要在这里重新发明轮子。响应式设计已经存在很长一段时间了,并且已经席卷了 Web 开发。也就是说,我建议您可以使用任何一个。响应式框架作品可以在你喜欢的地方工作。我个人最喜欢并且建议使用的是 Twitter Bootstrap 框架。当您熟悉了它们的工作原理后,它就会变得非常智能、重量轻且易于使用。您不必只担心 iPhone 和桌面版。 Twitter Bootstrap 也适用于其他设备,例如表格等。

现在直接回答您的问题,因为您想在移动设备和桌面设备上显示相同的选项卡式内容,而不需要两个单独的 html 文件。以下是我为您提供的示例演示。

我有一个包含所有内容的简单 html 文件,它使用 twitter bootstrap 作为响应式框架。

HTML

请参阅 fiddle ,它太大(内容)无法粘贴到此处:)

CSS

除了加载 bootstrap.css 和 bootstrap-responsive.css 之外,我需要自定义 CSS 来适应我的页面布局。

CSS 中真正发挥作用的最重要部分是媒体查询。我指定设备宽度并要求 CSS 在达到该设备宽度时以这种方式显示。媒体查询语法如下:

@media  (max-width:480px) {
   // Custom for device that has width 480px;

}

现在 iPhone 的布局宽度为 480 像素,当在其上查看我的页面的设备时,我想设置元素的样式以适应 480 像素的屏幕。

这是页面的自定义 CSS:

.container {
    margin-top: 10px;
}
.ora, .ban, .man{display:none;}
.fruit-content{width:100%;}
li{display:inline-block;width:24%;text-align:center;border-bottom:1px solid #fff;background: #C0C;}
ul.upperul{margin:0 0 0 0px;width:103%;}
.custom-row{border:1px solid green;}
.selected{background: #c0c0c0;}
@media  (max-width:480px) {
    li{display: block;width: 100%;text-align: left;}
    .custom-row{border:1px solid #000000;}
    ul.upperul{margin-left: 0px;width:100%;}

}

JS

现在是关于切换选项卡内容的功能部分。我使用 jQuery 只用了几行代码以选项卡式方式设置内容:

$(function() {
    $("li").live("click" , function() {
     $(this).css("background","#c0c0c0").siblings().css("background","#C0C");
     $(".des").hide().eq($(this).index()).show();
    })
    .eq(0).addClass('selected');
});

最后,这些部分的整个构建 block 就在这里:

DEMO

全屏结果是 Here ,调整浏览器大小并查看内容的行为方式和实现的响应能力。

关于jquery - 如何在两个基于 Jquery 的布局之间切换(使用桌面和移动设备时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13276098/

相关文章:

javascript - 固定滚动对象 (CSS)

java - 如何将列表从 servlet 传递到 ajax 调用

用于复选框其他选项的 Jquery 函数

javascript - 隐藏搜索字段代码只执行一次

jquery - 在按钮上单击幻灯片并专注于 jquery mobile 中的搜索输入

Android:使用 addView 时会忽略 match_parent

android - 删除android按钮上的阴影效果

android - ScrollView 内的 View 并没有占据所有位置

html - 设置旋转框位置 JQuery Mobile (css)

javascript - jquery mobile - 移动设备上的 keyup keydown