我目前正在建立一個非常簡單的覆蓋效果的網站 - 我有一個'漢堡'(.mobilemenu
)菜單圖標,當點擊切換我的導航覆蓋圖上的僞類時(.mobile-nav
)。我正在尋找添加一些代碼,這些代碼還會在初始點擊時禁用touchmove
,並且當再次單擊(.mobilemenu
)時,將恢復默認行爲。啓用/禁用touchmove點擊
這是我的代碼,因爲它代表:
jQuery('.mobilemenu').click(function(e) {
jQuery(this).toggleClass('is-active');
jQuery('.mobile-nav').toggleClass('active');
e.preventDefault();
});
我試過如下:
jQuery('.mobilemenu').click(function(e) {
jQuery(this).toggleClass('is-active');
jQuery('.mobile-nav').toggleClass('active');
if('.mobile-nav').hasClass('active') {
$(body).on('touchmove', function(e) {
e.preventDefault();
}};
e.preventDefault();
});
這顯然是行不通的!
坦率地說,Javascript/JQuery對我來說很新,所以我確信這裏的語法不正確。我是否可以切換觸摸移動被禁用的主體類?或者我必須以某種方式重寫代碼並使用bind
?
編輯:在@約翰R的建議,我已經改變了我的代碼的語法稍有 - 這是一個小提琴:JS fiddle
我現在的代碼如下:
jQuery('.mobilemenu').click(function(e) {
jQuery(this).toggleClass('is-active');
jQuery('.mobile-nav').toggleClass('active');
if(jQuery('.mobile-nav').hasClass('active')) {
$(body).on('touchmove', function(e) {
e.preventDefault();
}};
e.preventDefault();
});
但是,這似乎完全殺死了覆蓋!我猜測雖然if(jQuery('.mobile-nav').hasClass('active')) {
等現在是正確的,但下面的內容可能不是?
編輯2:那麼一點玩弄我已經更新了語法後,覆蓋重新工作,但我仍然可以滾動頁面的主體iPhone上的覆蓋背後:http://jsfiddle.net/jameshenry/bzau0jaz/1/ - 如果誰有我真的很感激!
jQuery('.mobilemenu').click(function(e) {
jQuery(this).toggleClass('is-active');
jQuery('.mobile-nav').toggleClass('active');
if(jQuery('.mobile-nav').hasClass('active')) {
$(body).on('touchmove', function(e){
e.preventDefault()}
)};
});
編輯3:與結構玩弄和語法之後多一點,我終於拿到了「touchmove,假」點擊後工作。唯一的問題是它不切換,所以滾動永久禁用!
jQuery('.mobilemenu').click(function(e) {
jQuery(this).toggleClass('is-active');
jQuery('.mobile-nav').toggleClass('active');
if(jQuery('.mobile-nav').hasClass('active')) {
$('body').on('touchmove', false);
};
});
我想一個else語句是要走的路,但我已經嘗試添加以下內容:
jQuery('.mobilemenu').click(function(e) {
jQuery(this).toggleClass('is-active');
jQuery('.mobile-nav').toggleClass('active');
if(jQuery('.mobile-nav').hasClass('active')) {
$('body').on('touchmove', false);
};
else { $('body').on('touchmove', true);};
});
但是,這似乎只是停止工作覆蓋 - 有什麼辦法在關閉時重新開啓「touchmove」?這裏是一個小提琴http://jsfiddle.net/jameshenry/bzau0jaz/2/
更正您的語法,如John R.所述,並嘗試使用css'Pointer-events:none'聲明具有樣式和切換條件的類。 https://css-tricks.com/almanac/properties/p/pointer-events/。在現代瀏覽器上支持。對於IE 9瀏覽器,Javascript是唯一的方法。 – Nirus