【问题标题】:trying to make navigation bar for tablet site试图为平板电脑网站制作导航栏
【发布时间】:2012-02-19 22:11:15
【问题描述】:

我正在为平板电脑网站设计导航栏。导航栏包含水平显示的元素,我希望能够在不移动窗口的情况下通过滑动(有点像封面流)显示新元素。这是我现在使用的代码(jQuery Mobile):

//Tablet Features
        $('#navHolder').bind('swipe', 
            function(e) {
              $('#navHolder').animate({left:thisLeft - 100});
            }
        );

如果不先禁用滚动,我认为我无法触发swipe,但我愿意接受所有建议。请帮忙。

【问题讨论】:

  • 你能发布你的导航栏html和javascript吗?

标签: javascript jquery-mobile jqtouch tablet


【解决方案1】:

将您正在滚动的元素的父容器设置为overflow : hidden,这样就不会出现滚动条。然后swipe 事件应该可以正常工作,因为您将无法使用本机滚动来滚动内容。

HTML --

    <div id="navHolder-container">
        <div id="navHolder">
            <p>content in here</p>
        </div>
    </div>

CSS --

#navHolder {
    position : absolute;
    width    : 1000px;
}
#navHolder-container {
    position : relative;
    overflow : hidden;
    height   : 100px;
    width    : 100%;
}

JS--

$(function () {
    var convert = {
            swipeleft  : '-=100',
            swiperight : '+=100'
        };
    $('#navHolder-container').bind('swipeleft swiperight', function(e) {
        $('#navHolder').animate({ left: convert[e.type]});
    });
});

这是一个演示:http://jsfiddle.net/B8PQn/1/

【讨论】:

  • @Jasper--我试过了,即使溢出设置为隐藏,溢出元素也会出现在其他元素下方的新行中。这对于垂直导航栏来说是理想的,但它不适用于水平导航栏。还有其他想法吗?
  • 内部元素(容器元素的子元素)必须有一个固定的宽度,这样它就不会换行。首先给它一个非常大的宽度,比如2000px
  • 还要确保在要动画的元素上设置position : relativeposition : absolute(更好),这是CSS 中的要求。这是一个工作演示:jsfiddle.net/B8PQn/1
  • @Jasper--你为什么选择使用匿名函数?还有,convert[e.type] 应该做什么?
  • $(function () {}); 是一个document.ready 事件处理程序,其中的代码只有在 DOM 准备好后才会运行。 event.type 返回触发事件处理程序运行的事件类型。 convert 是一个变量,它接受一个值并输出另一个值。它接受事件类型 (swipeleft/swiperight) 并返回动画的正确偏移量。例如,如果用户swiperights,则swiperight 字符串被传递到convert 变量,输出为+=100,因此元素向右移动。 swileleft 也是如此,但它使元素向左移动。
最近更新 更多