jQuery:切换/移动下拉箭头

Posted

技术标签:

【中文标题】jQuery:切换/移动下拉箭头【英文标题】:jQuery: toggle / move dropdown arrow 【发布时间】:2016-01-02 14:51:51 【问题描述】:

我目前的布局如下所示: ...并且我希望小克拉随我的导航栏选择一起移动。换句话说,当我选择“信息”时,我希望克拉在信息下移动。我已经完成了克拉的移动,但我无法让它的可见性切换工作。

jQuery

​​>
$(document).ready(function () 

    $(".navbar-link").on("click", function() 
        var el = $(this);
        var dd = el.siblings();

        var loc = el.offset();
        var left = loc.left;
        var width = el.width();
        var center = left + (0.5 * width);
        var corrected_center = center - 5;

        $(".arrow-up").css("left", corrected_center);

        if ( el.hasClass("arrow_up_visible") ) 
            $(".arrow-up").hide();
            el.removeClass("arrow_up_visible");
         else 
            $(".arrow-up").show();
            el.addClass("arrow_up_visible");
        
    );
);

html

<nav class="navbar navbar-default">
  <div class="container-fluid"> 
    <div class="row">
        <div class="col-md-2">
          <ul class="nav navbar-nav navbar-left">
            <li class="navbar-link"><a href="#" class="navbar-link-header">Testimonials</a></li>
          </ul>
        </div>
        <div class="col-md-2">
          <ul class="nav navbar-nav navbar-left">
            <li class="navbar-link"><a href="#" class="navbar-link-header">Locations</a></li>
          </ul>
        </div>
        <div class="col-md-4 text-center">
            <img src="smallw_red_shaddow_small.jpg"   />
        </div>
        <div class="col-md-2">
          <ul class="nav navbar-nav navbar-right">
            <li class="navbar-link"><a href="#" class="navbar-link-header">Information</a></li>
            </ul>
        </div>
        <div class="col-md-2">
          <ul class="nav navbar-nav navbar-right">
            <li class="navbar-link"><a href="#" class="navbar-link-header">Sign In</a></li>
          </ul>
        </div>
      </div>
</div>
</nav>

css

.navbar 
    border: none;


.navbar-link 
    text-align: center;


.banner-box 
    background: #009FB2;
    left: 0;
    top: 75px;
    height: 35%;
    width: 100%;
    color: #000000;
    position: fixed;

.banner-title 
    margin-left: 116px;
    margin-top: 38px;
    font-family: open-sans;
    font-style: normal;
    font-weight: 300;


.dropdown-nav 
    z-index: 1000;
    margin-left: 0;
    position: fixed;
    top: 75px;
    background-color: #FDA220;
    color: #000000;
    width: 100%;
    left: 0px;
    display: inline;
    height: 30px;
    display: none;


.dropdown-nav-link 
    text-align: center;
    line-height: 30px;
    list-style-type: none;
    color: #000000;
    text-decoration: none;


.dropdown-menu > li 
    top: 39px;
    /* [disabled]width: 152px; */


.dropdown-menu-down 
    display: inline;


.drop-it 
    color: white;
    background: black;


.dropdown-link-a 
    color: #000000;


.dropdown-link-a:hover 
    color: #000000;
    font-weight: 700;
    text-decoration: none;

.navbar-link-header 
    color: #E7292A;


.navbar-link-header:hover 
    color: #E7292A;
    font-weight: 700;


.arrow_up_visible 


.arrow-up 
    width: 0;
    height: 0;
    border-left: 10px solid transparent;
    border-right: 10px solid transparent;
    border-bottom: 10px solid #FDA220;
    z-index: 1000;
    left: 1011px;
    position: absolute;
    top: 66px;
    display: none;


.arrow-down 
    width: 0; 
    height: 0; 
    border-left: 20px solid transparent;
    border-right: 20px solid transparent;

    border-top: 20px solid #f00;


.arrow-right 
    width: 0; 
    height: 0; 
    border-top: 60px solid transparent;
    border-bottom: 60px solid transparent;

    border-left: 60px solid green;


.arrow-left 
    width: 0; 
    height: 0; 
    border-top: 10px solid transparent;
    border-bottom: 10px solid transparent; 

    border-right:10px solid blue; 

这种切换“有效”但没有完成我想要的。理想情况下,当我单击不同的导航栏链接时,克拉应该只是移动,而不是消失,当克拉移动时,arrow_up_visible 类应该从上一个链接中删除。

我还没有为此做任何事情,但如果这样可以更容易地帮助我,我可以尝试。

谢谢

【问题讨论】:

你也应该发布你的html,如果可能的话,提供一个小提琴 我添加了css和html。我无法让小提琴看起来正确 我想我已经到了当我点击离开时需要删除类但我似乎无法让它工作的地步。也许有更好的方法? 【参考方案1】:

我在您发布标记之前创建了此内容,但想法基本相同(如果我正确理解您的问题)。

$(document).ready(function () 

    $(".navbar-link").on("click", function() 
        var el = $(this);
        var dd = el.siblings();

        var loc = el.offset();
        var left = loc.left;
        var width = el.width();
        var center = left + (0.5 * width);
        var corrected_center = center - 5;
      
        var isActive = el.hasClass('active');
		$(".navbar-link").removeClass('active');
        
        $(".arrow-up").css("left", corrected_center);
        
        if (isActive) 
            $('.arrow-up').hide();
         else 
            $('.arrow-up').show();
            el.addClass('active');
        
        
    );
);
.navbar 
    position: relative;


ul 
    list-style: none;
    padding: 0;
    margin: 0;


li 
    display: block;
    float: left;
    text-align: center;
    width: 25%;


.active 
  color: rd;


.arrow-up 
    position: absolute;
    background: orange;
    width: 10px;
    height: 10px;
    margin-left: -5px;
    top: 20px;
    left: 0;
    display: none;
    /* important bit... */
    transition: all .5s ease;


.active 
    color: red;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<nav class="navbar">
    <ul>
        <li><a href="#" class="navbar-link">Link</a></li>
        <li><a href="#" class="navbar-link">Link</a></li>
        <li><a href="#" class="navbar-link">Link</a></li>
        <li><a href="#" class="navbar-link">Link</a></li>
    </ul>
    <div class="arrow-up"></div>
</nav>

【讨论】:

差不多了!感谢您添加动画位,这将是我的下一个问题。我唯一缺少的是当我点击一个存在克拉的链接时删除克拉(又名切换) 啊,好的。对不起,我误解了你的目的。检查更新 谢谢!!我一直在用逻辑循环让自己发疯。

以上是关于jQuery:切换/移动下拉箭头的主要内容,如果未能解决你的问题,请参考以下文章

到达下拉列表时单击iphone移动箭头键,应显示下拉列表内容

为啥当我按下刷新时,选择中的下拉箭头会改变外观和移动位置?

Bootstrap 3 <select> 将下拉箭头向左移动并更改其块的颜色

如何实现移动端点击下拉箭头显示全部文字

如何在引导下拉菜单中启用向上和向下箭头键

Firefox 和 Safari 上的下拉箭头样式错误