用于 JQuery 动画导航栏的 DRY 解决方案
DRY solution for a JQuery animated navbar
我是JQuery和Web开发的新手,现在我陷入了一个似乎无法克服的问题。我正在为我的 JQuery 动画导航栏寻找 DRY 解决方案。您可以通过查看以下非 DRY jfiddle 来获得这个想法:
$(document).ready(function(){
$('#box1').on('click', function() {
$('#box1').css({'height':'100px', 'transition':'height 1s'});
$('#box2').css({'height':'50px', 'transition':'height 1s'});
$('#box3').css({'height':'50px', 'transition':'height 1s'});
});
$('#box2').on('click', function() {
$('#box1').css({'height':'50px', 'transition':'height 1s'});
$('#box2').css({'height':'100px', 'transition':'height 1s'});
$('#box3').css({'height':'50px', 'transition':'height 1s'});
});
$('#box3').on('click', function() {
$('#box1').css({'height':'50px', 'transition':'height 1s'});
$('#box2').css({'height':'50px', 'transition':'height 1s'});
$('#box3').css({'height':'100px', 'transition':'height 1s'});
});
});
https://jsfiddle.net/cm70947/m06799xh/
我不明白的是,如何在 DRY 上下文中控制div 高度,以便在例如单击 #box1 时,它的高度从 50px 增加到 100px,而其他div 同时从 100px 降低到 50px?我正在寻找与 css 过渡类似的行为。我这里有另一个例子来说明我认为 DRY 版本会是什么样子(希望它能让你了解我在这里追求什么):
http://jsfiddle.net/cm70947/q2nxmaps/
第二个示例的问题在于,当我单击例如 #box2 时,#box1 保持 100px,而我希望它的高度从 100px 降低到 50px。我也尝试了一些removeClass/addClass解决方案,但到目前为止没有运气。
任何帮助都非常感谢!
您已经拥有了所需的一切。只需使用 this
和 .not(this)
:
$(document).ready(function () {
$('.box').on('click', function () {
$(this).css({'height': '100px', 'transition': 'height 1s'});
$('.box').not(this).css({'height': '50px', 'transition': 'height 1s'});
});
});
js小提琴示例
尝试将 .box 类添加到 #box1、#box2 和 #box3 元素,然后运行以下代码:
$('.box').on('click', function() {
$('.box').css({'height':'50px', 'transition':'height 1s'});
$(this).css({'height':'100px', 'transition':'height 1s'});
});
我尽力不将值硬编码到 jQuery 中,所以我会写一些类似于 taxicala 的答案的东西,没有硬编码值:
<div id="box1"
class="js-box"
data-transition-default="50px"
data-transition-click="100px" > ... <div>
jquery:
$('.js-box').on('click', function()
{
var $this = $(this);
$('.js-box').each(function()
{
if ($this == $(this))
{
return;
}
var defaultHeight = $(this).data('transition-default');
$(this).css({'height': defaultHeight , 'transition':'height 1s'});
});
var clickHeight = $this.data('transition-click');
$this.css({'height':clickHeight , 'transition':'height 1s'});
});
现在它不限于高度的一些特定值(也可以更新用于过渡),因此它更可重用。
相关文章:
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- iPad虚拟键盘-哪一个-javasctript解决方案
- AJAX HTTP基本身份验证解决方案
- 在chrome web商店中打开时,是否有允许执行内容/后台脚本的解决方案
- Chart.js-添加渐变而不是纯色-实现解决方案
- learnyounode杂耍异步解决方案不工作
- 了解因子分解解决方案
- 提交表单后的最佳解决方案
- 计时器在使用 jQuery 一分钟后没有触发,或者每 1 分钟后给出一些其他解决方案来触发功能
- chrome中的意外全局变量有解决方案吗
- 更好的解决方案HTML元素幻灯片从右侧CSS转换
- 使用SeleniumWebdriver将文本复制到文件时出现编译错误的解决方案
- 如何让我的网站上的WEBP图像加载在morzilla firefox中有一个可能的解决方案吗?如果是,那么如何
- JS驱动的常见问题页面的推荐DB解决方案
- 这里有一个更优雅的/DRY/可维护的JS解决方案
- 什么是农民最实用的解决方案;印刷动物”;
- 根据某些条件验证用户输入,而不是将输入输入到数组中,需要最基本的解决方案
- 将数据加载到地图上的更好解决方案
- 用于 JQuery 动画导航栏的 DRY 解决方案
- 用于多个连接的DRY解决方案