BIG EDIT:更新了代码部分,但问题仍然相同。
我可能有一个独特的jQuery问题,我可以使用一些帮助。
我有一个看起来像这样的功能(效果很好)......
var openslide1 = function() {
$("#slide1").animate({
left: "+=250px",
}, 400, function() {
// Animation complete.
});
$(this).unbind('click', openslide1); \\ to prevent from pushing slide over too many times
};
$("#openslide1").click(openslide1);
我的问题是可能存在无限数量的幻灯片,因此“openlides”。每个“openlide”选择器都对应其自己独特的幻灯片。 (例如#openslide2将打开#slide2并取消绑定#openslide2 ......依此类推)。
那么如何将这些组合成一个变量和函数呢?
作为旁注......我也想在点击另一个事件时“重新绑定”#openslide。目前,我可以通过这个一次做一个....
$("#closeslide1").click(function() {
$("#slide1").animate({
left: "-=250px",
}, 500, function() {
// Animation complete.
});
$('#openslide1').click(openslide1); \\ rebinds openslide1
});
但是一旦这成为一个组合函数,我假设“openslide1”将不再是函数的变量。那么当点击#closeslide时,如何重新绑定点击事件呢? (显然,我将使用此问题的第一部分来应用于闭合变量。)
<div class="section">
<a class="edit-btn" id="openslide1" href="#null">edit</a>
<a class="edit-btn" id="openslide2" href="#null">edit</a>
<a class="edit-btn" id="openslide3" href="#null">edit</a>
<a class="edit-btn" id="openslide4" href="#null">edit</a>
</div>
<div class="slide" id="slide1">
<h1>Edit Row</h1>
<p>Prototyping data below, may not reflect link clicked.</p>
<a href="#null" id="submitslide1" class="btn btn-primary">Submit</a> <a id="closeslide1" class="btn btn-danger" style="color:#fff" href="#null">Cancel</a>
</div>
<div class="slide" id="slide2">
<h1>Edit Row</h1>
<p>Prototyping data below, may not reflect link clicked.</p>
<a href="#null" id="submitslide2" class="btn btn-primary">Submit</a> <a id="closeslide2" class="btn btn-danger" style="color:#fff" href="#null">Cancel</a>
</div>
<div class="slide" id="slide3">
<h1>Edit Row</h1>
<p>Prototyping data below, may not reflect link clicked.</p>
<a href="#null" id="submitslide3" class="btn btn-primary">Submit</a> <a id="closeslide3" class="btn btn-danger" style="color:#fff" href="#null">Cancel</a>
</div>
<div class="slide" id="slide4">
<h1>Edit Row</h1>
<p>Prototyping data below, may not reflect link clicked.</p>
<a href="#null" id="submitslide4" class="btn btn-primary">Submit</a> <a id="closeslide4" class="btn btn-danger" style="color:#fff" href="#null">Cancel</a>
</div>
请帮助!
谢谢!
答案 0 :(得分:0)
我会试一试,这有助于你的便携性吗?
$(".openslide1").click(function() {
openSlide(".slide1", "body", 400, ".openslide1");
});
function openSlide(target, bodyObj, speed, original) {
$(target).animate({
left: "+=250px",
}, speed, function() {
// Animation complete.
});
$(bodyObj).animate({
marginLeft: "+=250px",
}, speed, function() {
// Animation complete.
});
$(original).unbind('click');
}
答案 1 :(得分:0)
更改函数以传递对要操作的元素(或元素)的引用:
var openslide = function(elem) {
var id = elem.attr("id");
$("#" + id.substring(5)).animate({
left: "+=250px",
}, 400, function() {
// Animation complete.
});
$('body').animate({
marginLeft: "+=250px",
}, 400, function() {
// Animation complete.
});
elem.unbind('click', openslide);
};
$(".edit-btn").click(function() {openslide($(this))});
然后你可以对你的所有元素使用单个函数,如果它们有一个公共类,你可以同时绑定它们(在这种情况下,我称它们为.openslide
)。
编辑:再次查看原始问题,我注意到在开始时设置动画的元素不是同一个元素。但是如果它与你点击的元素之间有一个容易定义的关系(例如,它是原始元素的子元素,或者是下一个兄弟元素,或者其他东西),你可以很容易地找到适当的选择器来选择它。在上面的示例中,我假设与具有.targetclass
类的目标元素存在兄弟关系,但将其更改为适合。
编辑2:将其更改为使用id,假设id openslide1
将对应ID为slide1
的元素。
答案 2 :(得分:0)
按如下方式构建链接:
<div class="section">
<a class="edit-btn openslide" data-slide="#slide1" href="#null">edit</a>
<a class="edit-btn openslide" data-slide="#slide2" href="#null">edit</a>
<a class="edit-btn openslide" data-slide="#slide3" href="#null">edit</a>
<a class="edit-btn openslide" data-slide="#slide4" href="#null">edit</a>
</div>
幻灯片如下:
<div class="slide" id="slide1">
<h1>Edit Row</h1>
<p>Prototyping data below, may not reflect link clicked.</p>
<a href="#null" class="submitslide1 btn btn-primary">Submit</a> <a class="closeslide1 btn btn-danger" style="color:#fff" href="#null">Cancel</a>
</div>
很难确切地知道需要什么效果,但处理程序的一般形状将是这样的:
$(".openslide, .closeslide").click(function() {
if($("body").filter(":animated").length) { return; } //animation in progress, abort.
var $slide = $($(this).data('slide'));
var state = $slide.data('state') || 'closed';
var sign = (state == 'closed') ? '+' : '-';
$slide.animate({
left: sign + "=250px"
}, 400, function(){
$slide.data('state', (sign == '+') ? 'open' : 'closed');
});
$('body').animate({
marginLeft: sign + "=250px"
}, 400);
return false;
});
未测试
正如您将看到的,一个函数(当它工作时)将处理slideopen和slideclose动作。
您必须调整脚本以实现您想要的效果。