【问题标题】:jquery: adding nav list to sliding divsjquery:将导航列表添加到滑动 div
【发布时间】:2011-12-06 08:03:36
【问题描述】:

您好 — 首先,我对 jquery 还很陌生,因此非常感谢您扩展的专业知识。

演示:http://www.transcendspace.com/beta/

我想为我的 div 生成一个导航:1|2|3|4|5 等,它会根据哪个 div 处于活动状态来突出显示数字。理想情况下,突出显示将与我的左/右箭头结合使用。

代码:`

$(document).ready(function() {
  $(window).resize(function () {
      resizePanel();
  });
});

function resizePanel() {

    width = $(window).width();
    height = $(window).height();

    mask_width = width * $('.item').length;

    $('#debug').html(width  + ' ' + height + ' ' + mask_width);
    $('#wrapper, .item').css({width: width, height: height});
    $('#mask').css({width: mask_width, height: height});
    $('#wrapper').scrollTo($('a.selected').attr('href'), 0);    
}


function scrollToPosition(element) {
   if (element !== undefined) {
        $("#wrapper").scrollTo(element, 800, {});
   }
}



$(function() {
     //Create an Array of posts
     var posts = $('.item');
     var position = 0; //Start Position
     var next = $('#next');
     var prev = $('#prev').hide();

 //Better performance to use Id selectors than class selectors
     next.click(function(evt) {
     //Scroll to next position
         prev.show();
         scrollToPosition(posts[position += 1]);

         if (position === posts.length - 1) {
             next.hide();
         }
});

prev.click(function(evt) {
    //Scroll to prev position    
    next.show();
scrollToPosition(posts[position -= 1]);

    if (position === 0) {
    prev.hide();
    }
});

}); 

 </script>'

【问题讨论】:

    标签: jquery html navigation scrollto


    【解决方案1】:

    在您的 .ready() 处理程序中,创建项目编号列表:

    var len = posts.length
    var $ul = $('<ul id="navItems">');
    for (var i=0; i<len; i++) {
        $('<li data-item="' + i+ '">' + (i+1) + '</li>')
            .click(function(e) {
                // go to this item when  you click
                // get the item num using $(this).data('item');
            })
            .appendTo($ul);
    }
    $ul.insertAfter($('#prev'));
    

    您可以使用 css 设置列表的样式以使其水平:

    #navItems { list-style: none; display: inline-block; }
       #navItems li { display: inline-block; width: 15px; height: 15px; }
       #navItems li { zoom: 1;  } // for old IE
    

    这里有一个fiddle 供你玩。


    实现点击

    这是一段代码,用于实现单击“项目”时的滚动。

    data-itemid属性中保存对应.item的ID应该会容易一些,毕竟我们做我们想做的:-)

    for (var i=0; i<len; i++) {
    
        // save the item id and not just the index
        $('<li data-itemid="' + posts[i].id + '">' + (i+1) + '</li>')
            .click(function(e) {
    
                // get the data from data-itemid attibute
                var itemid = $(this).data('itemid');
    
                // use your scrollToPosition method
                // with our 'itemid' we can get the element using the ID selector
                scrollToPosition($('#' + itemid));
    
            })
            .appendTo($ul);
        }
    
    }
    

    我也更新了小提琴。


    关于您的代码的几点说明

    • 您的代码中实际上有两个 ready 处理程序。顶部有一个明确的$(document).ready()$(function() {...})。他们实际上都在 ready 事件中工作,所以你应该只保留一个。它适用于两个,但它使您的代码更难管理。

    • 总是这样做:首先用var 声明你的变量,然后是你的本地函数,然后做你必须做的事情。尽可能尊重此画布将帮助您阅读代码,因为您希望事物在那里或那里。

    • 为您的 jquery 变量添加前缀$var $posts = $('.item');。然后,当您看到一个变量时,您就知道它的名称包含(或应该包含)什么。

    • jQuery 是关于链接的。

    不要这样做:

    var next = $('#next');
    next.click(function(e) {...});
    

    这样做:

    var $next = $('#next').click(...).addClass(...).show();
    var $prev = $('#prev').click(...).toggle((position > 0));
    

    【讨论】:

    • 感谢您的回复!我已经继续更新了我的代码,它正在抓取我的物品。我尝试使用:$(this).data.scrollTo('item'); 在 .click 中添加我的号召性用语,但不幸的是没有奏效 - 再次,我是新手,但我非常感谢您的帮助。更新:link
    • 要获得data-item 值,您必须执行.data('item')。查看.data() 文档。
    • 我已经用更多信息更新了我的答案。如果有帮助,请采纳答案,好吗?
    • 很明显,就语法/jquery 的基础知识而言,这有点超出我的想象,但我非常感谢您的时间/专业知识。 1. 我怎样才能让我的箭头和我的链接一起工作?例如,链接 1 应该处于“选定”状态,因为这是第一个处于活动状态的 div。当您单击“下一步”时,它会将选定状态移动到“2”,依此类推。另一个要考虑的变量是,如果您在列表中选择“5”或“1”,则箭头应启用/或禁用。然而,首先,我怎样才能让它真正滚动到选定的项目,而不是弹出警报?
    • 您可以使用 css 类来实现这一点。在您的下一个和上一个单击处理程序中,对所有项目使用removeClass('active'),对当前项目使用addClass('active')。您应该能够在网络或 SO 上找到示例。对于带有 alert() 的部分,我已经提供了代码(使用您的 scrollToPosition 函数),请检查答案。
    【解决方案2】:
    1. 使用 ID 而不是类时的时间收益对于非循环使用来说太小了,不值得为所有 div 克隆添加增量而混淆自己。
    2. 要知道按下了哪个键,您可以使用 keydown/keyup - http://jsfiddle.net/RsFpJ/4/ - 尝试在字段中输入任何内容,您将看到哪个代码按钮具有
    3. 尝试使用 jsfiddle.net 来分享您的代码示例 - 在这种情况下提供帮助会容易得多,因为我们不必重新输入您的代码。
    4. 您可以使用 jquery 的 index() 函数 http://jsfiddle.net/RsFpJ/5/、原生 javascript 的长度和 for 为 div 元素构建数字

    jQuery

        var objs = $(".key");
        var navHtml = '';
        for (i = 0; i < objs.length; i++) {
            navHtml += '<span>'+(i+1)+'</span>' ;
        }
    
        $('#nav').html(navHtml);
    
        $('#nav span').click(function(){
            // index of span inside set of spans, starting from 0;
            var eqIndex = $('#nav span').index(this);
            objs.eq(eqIndex).css("border-color","red");        
        });
    

    HTML:

    <div class="key"></div>
    <div class="key"></div>
    <div class="key"></div>
    <div class="key"></div>
    <div class="key"></div>
    
    <div id="nav"></div>
    

    【讨论】:

      猜你喜欢
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多