使用jQuery替换DIV
我正在使用jQuery为客户构建一个可排序的传记部分 我最初只使用了两个bios(第一人称和第三人称),我让它工作得很好:使用jQuery替换DIV,jquery,css,fadein,fadeout,Jquery,Css,Fadein,Fadeout,我正在使用jQuery为客户构建一个可排序的传记部分 我最初只使用了两个bios(第一人称和第三人称),我让它工作得很好: $("a#first").click(function(){ $("div.third").fadeOut("",function(){ $("div.first").fadeIn(""); }); }); 这是一把小提琴: 现在我们已经改变了方向,正在用三种不同的生物长度(短、中、长)进行分类。由于某种原因,我不能让它工作。我认为这只是
$("a#first").click(function(){
$("div.third").fadeOut("",function(){
$("div.first").fadeIn("");
});
});
这是一把小提琴:
现在我们已经改变了方向,正在用三种不同的生物长度(短、中、长)进行分类。由于某种原因,我不能让它工作。我认为这只是将额外的div添加到选择器(下面的第2行)中的问题,但它非常滞后
$("a#short").click(function(){
$("div.medium, div.long").fadeOut("",function(){
$("div.short").fadeIn("");
});
});
这是一把小提琴:
如果有任何帮助,我们将不胜感激。请向您的小提琴手查询。我绝对会定位bios,这样它们都在同一个点垂直启动,这样就消除了在转换它们时的“跳转”
.short, .medium, .long {
position: absolute;
top: 40px;
}
对于这种情况,最好为当前的活动bio设置一个“活动”类,这样可以更容易管理
$('a#short').click(function() {
$('div.active').removeClass("active").fadeOut("", function() {
$('div.short').addClass("active").fadeIn("");
});
});
如果你能想出一种让代码更加模块化的方法,那就更好了,这样你就不必在每次需要添加/删除bio时都对JS进行修改
假设我的链接设置为
<ul id="bionav">
<a class="bio-link" data-bio="short">short</a>
<a class="bio-link" data-bio="med">med</a>
<a class="bio-link" data-bio="long">long</a>
</ul>
<ul id="biodisplay">
<div class="bio-link short">short</div>
<div class="bio-link med">med</div>
<div class="bio-link long">long</div>
</ul>
这也会为您执行一些事件委派,因此您可以将1个事件附加到dom,而不是3个
同时考虑到Josh的建议,您不需要将淡入淡出设置为回调淡出,您可以同时启动淡入淡出设置。是否同时显示两个div?因为否则我不明白你为什么会淡出其中两个?其思路如下: 1.向当前显示的div中添加一个类(您已经这样做了,但位置不对)(假设类名为“selected”) 2.单击选项卡时,选择具有“selected”类的元素并将其淡出。在提供给淡出的回调中,还将从显示的元素中删除所选的类,并将其放置到刚才单击的选项卡中 当然,jqueryui总是存在的。
祝你好运这里有一些与你的“设计”相关的重构。您可以通过添加's
position:absolute
CSS样式来保持标记完全相同。我想发布这篇文章,让您了解如何更轻松地管理这段代码(以及修复实际问题)
CSS:
.short, .medium, .long {
position: absolute;
top: 30px; /* whatever you prefer */
}
JS:
$("a#short, a#medium, a#long").on("click", function() {
var elid = $(this).attr('id');
// Run getTab based on id attribute
getTab(elid);
});
function getTab(tab, speed=500) {
// Select the current tab
var the_tab = $("#" + tab);
// Select the current tab's matching content div
var content = $("."+tab);
// Push sibling tabs' classes into an array
// Tab id value matches with respective div class value
sibs = [];
the_tab.siblings().each(function () {
sibs.push('.' + $(this).attr('id'));
// Deselect sibling tabs
$(this).removeClass('selected');
});
// Fade out siblings
$(sibs.join(",")).fadeOut(speed, function() {
// Fade in current tab and add selected class
the_tab.addClass('selected');
content.fadeIn(speed);
});
}
我们开始:
这里的主要问题是,您应该绝对定位.short、.medium和.long
类,这样您将避免缺少的问题。另外,你应该把它放在另一个类中。如果将来添加一个.extralong
类,那么使用jQuery很容易选择它
经过几次更改后,您的代码应该如下所示:
Jquery:
CSS:
小提琴:
$("a#short, a#medium, a#long").on("click", function() {
var elid = $(this).attr('id');
// Run getTab based on id attribute
getTab(elid);
});
function getTab(tab, speed=500) {
// Select the current tab
var the_tab = $("#" + tab);
// Select the current tab's matching content div
var content = $("."+tab);
// Push sibling tabs' classes into an array
// Tab id value matches with respective div class value
sibs = [];
the_tab.siblings().each(function () {
sibs.push('.' + $(this).attr('id'));
// Deselect sibling tabs
$(this).removeClass('selected');
});
// Fade out siblings
$(sibs.join(",")).fadeOut(speed, function() {
// Fade in current tab and add selected class
the_tab.addClass('selected');
content.fadeIn(speed);
});
}
$('.toggles a').click(function(e) {
//Never forget this
e.preventDefault();
//if click on the selected do nothing
if($(this).hasClass('selected'))
return false;
//let fadeOut all the texts
$('.short, .medium, .long').fadeOut('10');
//let fadeIn the clicked one
$('.'+$(this).attr('id')).fadeIn();
//remove all the selected class
$('.toggles a').removeClass('selected');
//add the selected class to the clicked one
$(this).addClass('selected');
});
.short, .medium, .long{
position: absolute;
}