jquery - 过渡或其他

标签 jquery html css

我有点坚持执行此操作的最佳实践。我的页眉中有一张标尺图片,位于导航栏上方。我使用“mouseenter”,标尺向右移动,在您悬停的按钮上方。我将 JQuery 与鼠标输入/离开一起使用,它采用数据标尺移动值并添加一个带有转换/翻译规则的类。它工作正常但是......看着css,我为每个位置写了一个新规则。这是五个按钮。这是相当多的CSS。另外,当窗口变小并且标尺变小时(Bootstrap css 响应),我将不得不更改这些变换值。如果有的话,我正在寻找更好或更短的代码。我查看了 sass 是否有帮助,但没有找到任何东西。如果可能的话,我现在只想使用 css/html/JS。在此先感谢您的帮助。 Jason Css 和 js 跟随。

$(".navbar-inverse .navbar-nav>li>a").mouseenter(function() {
  var moveTo = $(this).data("ruler-moves");
  console.log(moveTo);
  $(".ruler").addClass(moveTo);

  $(".navbar-inverse .navbar-nav>li>a").mouseleave(function() {
    $(".ruler").removeClass(moveTo);
  });
});
.ruler {
    margin-top: 55px;
    -webkit-transition: all 1s ease-in-out;
    -moz-transition: all 1s ease-in-out;
    -o-transition: all 1s ease-in-out;
    -ms-transition: all 1s ease-in-out;
}

.home {
    -webkit-transform: translate(4em, 0);
    -moz-transform: translate(4em, 0);
    -o-transform: translate(4em, 0);
    -ms-transform: translate(4em, 0);
}

.contact {
   -webkit-transform: translate(8em, 0);
   -moz-transform: translate(8em, 0);
   -o-transform: translate(8em, 0);
   -ms-transform: translate(8em, 0);
}

.estimate {
   -webkit-transform: translate(12em, 0);
   -moz-transform: translate(12em, 0);
   -o-transform: translate(12em, 0);
   -ms-transform: translate(12em, 0);
}

.gallery {
   -webkit-transform: translate(16em, 0);
   -moz-transform: translate(16em, 0);
   -o-transform: translate(16em, 0);
   -ms-transform: translate(16em, 0);
}

.references {
   -webkit-transform: translate(20em, 0);
   -moz-transform: translate(20em, 0);
   -o-transform: translate(20em, 0);
   -ms-transform: translate(20em, 0);
}
<!--jQuery-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Latest compiled and minified CSS (Bootstrap)-->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">

<!-- Optional theme (Bootstrap) -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">

<!-- Latest compiled and minified JavaScript (Bootstrap)-->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>


<div class="row header">
  <div class="col-md-6">
    <a href="index.php">
      <img class="img-responsive logo" src="images/logo.jpg">
    </a>
  </div>

  <div class="col-md-6">
    <img src="images/ruler.jpg" class="img-responsive ruler">
  </div>
</div>
<div id="navbar" class="navbar-collapse collapse">
  <ul class="nav navbar-nav pull-right my-nav">
    <li><a href="index.php" data-ruler-moves="home">Home</a></li>
    <li><a href="contact.php" data-ruler-moves="contact">Contact</a></li>
    <li><a href="estimate.php" data-ruler-moves="estimate">Estimate</a></li>
    <li><a href="gallery.php" data-ruler-moves="gallery">Gallery</a></li>
    <li><a href="references.php" data-ruler-moves="references">References</a></li>
  </ul>
</div>

最佳答案

您可以轻松地为此创建混合,将您想要的值作为参数传递:

@mixin posXY($x, $y) {
  -webkit-transform: translate($x, $y);
  -moz-transform: translate($x, $y);
  -o-transform: translate($x, $y);
  -ms-transform: translate($x, $y);
  transform: translate($x, $y);
}

然后像这样使用它:

.gallery {
  @include posXY(4em, 0);
}

这将为您提供更短的 SASS 文件,并使其更快、更有效地定位元素。我通常做的也是在这个 mixin 中应用 position: absolute; 以及 top, right, leftbottom 规则以方便使用。

我什至会更进一步并创建一个transitions mixin:

@mixin transitions($property, $duration, $effect) {
  -webkit-transition: -webkit-$property $duration $effect;
  transition: $property $duration $effect;
}

然后像这样使用它:

.ruler {
  @include transitions(all, 400ms, ease-in-out);
}

您可以采取的另一个改进代码的步骤是使其编写速度更快,因此:

$(".navbar-inverse .navbar-nav>li>a")

应该保存在一个变量中,所以如果它发生变化,您不必在 10 个不同的地方重写它以使代码再次运行。所以这样做:

var anchor = $(".navbar-inverse .navbar-nav>li>a");

anchor.mouseenter(function() {

  // Your code here
});

anchor.mouseleave(function() {

  // Your code here
});

关于jquery - 过渡或其他,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32473685/

相关文章:

jquery - 将一个动画 div 放在另一个带有 z-index 的 div 下

javascript - 仅当 id 不存在时,jQuery 卸载警报

javascript - ajax 调用之前转义 JSON 字符串中的字符

javascript - 灯箱效果JS帮助请

javascript - ionic 2 与节段不工作?

jquery - 使用 jQuery 将新的输入文本框 DOM 附加到 HTML 正文

css - 如何使表格中的 <td> 元素具有相同的高度?

javascript - Firefox 不使用光标 : none; 隐藏光标

HTML 移动应用程序和表格

javascript - scrollTop 等于 0,即使 div 位于页面下方