[英]Fire 2 actions with ONE click on a button
我試圖將兩個動作分配給jQuery中的按鈕。 該按鈕應該:
當兩個操作都在按鈕上起作用時,它們當前需要單擊兩次。 第一次單擊時,將顯示div,但要將其滾動到視圖中,我需要再次單擊該按鈕。
有什么建議我要怎么做嗎?
jQuery的
$(document).ready(function () {
"use strict";
$('.footer a').click(function (event) {
event.preventDefault();
$('.impr-text').hide(); // hide previous popup div
var id = $(this).data("id"); // get the div id which to show
$('#' + id).fadeIn(function () { // show cuurent click link's popup
$(this).css({
'display': 'block'
});
});
$.scrollTo( '#impressum-footer', 800, {easing:'elasout'} );
});
});
HTML
<div id="impressum-footer">
<div class="footer">
<div class="inner-wrap-imp">
<ul class="impressum-links">
<li><a href="#impressum-footer" class="impr-link" data-id="impr-text">Impressum</a></li>
<li>|</li>
<li><a href="#impressum-footer" class="impr-link" data-id="impr-text">Datenschutz</a></li>
<li class="impressum-button" ><a href="#impressum-footer" class="impr-link" data-id="impr-text"></a></li>
</ul>
</div>
</div>
<div id="impr-text" class="impr-text">
<div class="inner-wrap"> ...
您需要將scrollTo
放在fadeIn
完成回調處理程序中。 這樣callTo
是在完成執行fadeIn
,而不是本質上,在同一時間。 當前,您似乎還在將回調函數放到另一個參數的位置(持續時間或選項對象,取決於所使用的方法簽名)。 不確定為什么要在那里進行CSS更改。
嘗試這樣的事情:
$(document).ready(function () {
"use strict";
$('.footer a').click(function (event) {
event.preventDefault();
$('.impr-text').hide(); // hide previous popup div
var id = $(this).data("id"); // get the div id which to show
$('#' + id).fadeIn({
duration: 100, // or whatever duration you want to use
complete: function() {
$.scrollTo( '#impressum-footer', 800, {easing:'elasout'} );
}
});
});
});
如果您要在一個按鈕上分配2種不同的操作,請將其設置為2種不同的類(或ID),可以說
<div class="action1 action2">
之后,在jQuery中您將能夠執行以下操作:
$('.action1').on('click', function (e) { console.log('#1'); ... });
$('.action2').on('click', function (e) { console.log('#2'); ... });
JsFiddle: http : //jsfiddle.net/g2wdd2cb/
我現在設法解決了。 @euvl解釋的方法就是一種...
在意識到它不起作用之后,我更改了代碼(滾動部分)。 現在,最終的(工作)代碼如下所示:
jQuery的:
$(document).ready(function () {
"use strict";
$('.footer-action-1 a').click(function (event) {
event.preventDefault();
$('.impr-text').hide(); // hide previous popup div
var id = $(this).data("id"); // get the div id which to show
$('#' + id).fadeIn(function () { // show cuurent click link's popup
$(this).css({
'display': 'block'
});
});
});
});
$(document).on('click','.footer-action-2 a', function(event) {
event.preventDefault();
var target = "#" + this.getAttribute('data-target');
$('html, body').animate({
scrollTop: $(target).offset().top
}, 2000);
});
HTML:
<div id="impressum-footer">
<div class="footer footer-action-1 footer-action-2">
<div class="inner-wrap-imp">
<ul class="impressum-links">
<li><a href="#" class="impr-link" data-id="impr-text" data-target="impressum-footer">Impressum</a></li>
<li>|</li>
<li><a href="#" class="impr-link" data-id="impr-text" data-target="impressum-footer">Datenschutz</a></li>
<li class="impressum-button" ><a href="#" class="impr-link" data-id="impr-text" data-target="impressum-footer"></a></li>
</ul>
</div>
</div>
<div id="impr-text" class="impr-text">
<div class="inner-wrap">
現在唯一的問題是它滾動得太遠了。 一旦添加偏移量,它就會停止工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.