【问题标题】:How to show sub-menu in a circular navigation menu on click of an element in jQuery如何在单击jQuery中的元素时在圆形导航菜单中显示子菜单
【发布时间】:2014-03-06 04:38:57
【问题描述】:

这个问题是上一个问题的后续问题,可以在这里找到:Need to fadeIn each circle 1 after the other with jQuery

现在基本上当点击“气候变化和能源”圈子时,我需要隐藏除了点击的圈子之外的所有其他圈子,并显示一个子集或其他与原始圈子遵循相同路径的圈子。但新圈子从点击圈子的下一个点开始。

我附上了一张点击圆圈时需要显示的图片,可以在这里看到:http://cl.ly/EO95

这是我尝试使用的代码:

HTML:

<div class="circle_holder seventh">
                <div class="circle pie">
                    <a href="#"><span>climate change and energy</span></a>
                </div>
                <div class="inner_circles hidden">
                    <div class="circle_holder eighth">
                        <div class="circle pie">
                            <a href="#"><span>energy efficiency</span></a>
                        </div>
                    </div>
                    <div class="circle_holder first">
                        <div class="circle pie">
                            <a href="#"><span>renewable energy</span></a>
                        </div>
                    </div>
                    <div class="circle_holder second">
                        <div class="circle pie">
                            <a href="#"><span>carbon finance</span></a>
                        </div>
                    </div>
                    <div class="circle_holder third">
                        <div class="circle pie">
                            <a href="#"><span>climate adaptation</span></a>
                        </div>
                    </div
                    <div class="circle_holder fourth">
                        <div class="circle pie">
                            <a href="#"><span>ghg footprint assessment</span></a>
                        </div>
                    </div
                </div>
            </div>

JS:

if ($.browser.msie || $.browser.version < 9) {
    var circle = $('.circles .circle_holder > .circle');
    $(circle).animate({
        height: 168,
        width: 168,
        left: '0',
        top: '0'
    }, 1000);
    if (window.PIE) {
        $('.pie').each(function() {
            PIE.attach(this);
        });
    }
}

$('.circles .circle_holder > .circle').each(function(i){
    var time = 300 * (i + 1);
    setTimeout(function(){
        $('.circle').eq(i).addClass('open').animate({opacity: '1'}, i);
        $('.circle a span').animate({opacity: '1'}, 4000);
    }, time);
});

setTimeout(function() {
   $('.circle').addClass('circles_loaded');
}, 3700);

$('.circles > .circle_holder > .circle').click( function(){
    $('.inner_circles').removeClass('hidden', function() {
        console.log($('.inner_circles').parent().hide());
        $('.inner_circles').find().parent('.circle_holder').hide();

        $('.inner_circles .circle').each(function(i){
            var time = 300 * (i + 1);
            setTimeout(function(){
                $('.inner_circles .circle').eq(i).addClass('open').animate({opacity: '1'}, i);
                $('.inner_circles .circle a span').animate({opacity: '1'}, 4000);
            }, time);
        });
    });
});

这是一个包含所有 HTML/CSS 和 JS 的 jsFiddle 的链接:http://jsfiddle.net/thomasbritton/wV867/

如果有人能帮我解决这个问题,我将非常感激,因为我已经为此烦恼了好几个小时。

如果有人愿意通过它进行交谈,如果它可能对事情有所帮助,我正在使用 Skype。

谢谢

【问题讨论】:

  • 好吧,我试图创建一个小提琴来玩 - 使用你的“旧”(上一个问题)CSS但没有成功......
  • 不,我的意思是,我们在这个问题中遗漏了一些 CSS,如果您已经提供了圆圈子集和您需要的其他内容,那就太好了...(附注:我得到了一个“工作演示” ' 通过将此问题中的 JS 添加到另一个问题的回答者演示中。)
  • 哦,好的,我已将其放入小提琴中,可在此处找到:jsfiddle.net/thomasbritton/wV867
  • 只有在“食物和水”点击才会弹出额外的圈子?
  • 点击“气候变化和能源”,第七圈

标签: jquery jquery-selectors jquery-animate traversal jquery-traversing


【解决方案1】:

试图通过 Skype 与您联系,但您没有接受邀请。
无论如何:点击气候变化和能源

DEMO jsBin

很抱歉破坏了你的 CSS,完整的 JS,... :)

但我认为这会有所帮助。看一下 CSS :您不必手动设置 bg 圆圈周围的元素。试着遵循这个概念并重做我留下的颜色。祝你好运!

var $outerC = $('.circle').not('.inner_circles > div > .circle');

var cX = 120; // center - distance from left
var cY = 130; // center - distance from top
var rad = 190; // SET .box DISTANCE (Radius from center);
var boxN = $outerC.length;

function circus(){
  $outerC.each(function(i,e){
    
      thisWc = $(e).outerWidth(true)/2;
      thisHc = $(e).outerHeight(true)/2;   
      var angle = (360/boxN)*i;
      var X = Math.round(cX+rad* Math.sin(angle*Math.PI/180))-2;
      var Y = Math.round(cY+rad*-Math.cos(angle*Math.PI/180))-2;  
      $(e).css({left:(X-thisWc), top:(Y-thisHc)});
    
  });
}
circus();

function fader(){
  $outerC.each(function(i,e){
          var time = 300*i;
          setTimeout(function(){
              $(e).addClass('open').animate({opacity: '1'}, time);
              $('.circle a span').animate({opacity: '1'}, 4000);
          }, time);
  });
}
fader();

$outerC.click(function(e){
    e.preventDefault();
  
    $outerC.fadeTo(300,0); // hide old ones
    $outerC = $(this).next('.hidden').find('.circle');   // set new
    boxN = $outerC.length;
    
    $('.hidden').show();
    $outerC.show();
    
    fader();
    circus(); 
  
}); 

您应该找到另一种更可编程的方式来将您的文本“居中”在您的圈子中。

【讨论】:

  • 非常感谢您,您能帮我解决这个问题,以便隐藏子圈并显示之前的圈子吗?
【解决方案2】:

值得一看:https://github.com/liri/moonMenuJS 这不是一个完整的圆形菜单,但相当不错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 2015-11-21
    • 2018-12-26
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多