2015-12-14 10 views
12

携帯電話で使用するためにバニラのjavascriptを使用してメニューにスライドがありますが、これまでのすべてのテストでモバイルブラウザが最初のタップを無視してしまいました(両方のタッチを試しました&) 。 2番目のタップから始めると、それ以降の各タップで美しく機能します。最初のタブを無視してバニラのjavascriptをクリックします。

オープニングとして、メニューを閉じることはページ上の唯一のjavascript機能です。私は巨大なライブラリをロードしたくないので、単純で小さくしておきたいと思います。私のコードは以下の通りです:

var b = document.getElementById('menubtn'); 
b.addEventListener('touchstart', function (e) { 
    var n = document.getElementById('nav'); 
    var ns = n.style.left; 
    if (ns == "-600px") { 
     n.style.left = "0px"; 
    } else { 
     n.style.left = "-600px"; 
    } 
    e.preventDefault(); 
}); 

これを初めてダブルクリックする必要はありませんか?

fwiw部門では、大きな画面ではナビゲーションメニューが、電話機ではスライドが表示されます。


編集:マット・スタイルのコメントに通じ、次の問題に

を解決し、私はclassList.toggleを使用してみました、それは問題を解決しました。最終バージョンは、以下である:

var b = document.getElementById('menubtn'); 
var n = document.getElementById('nav'); 
b.addEventListener('touchstart', function() { 
    n.classList.toggle('shwmenu'); 
    setTimeout(function() { 
     b.classList.toggle('shwmenu'); 
    }, 500); 
}); 

Iは、閉と開状態との間のアイコンを切り替えること遅延menubtnコードを追加しました。

+1

これはあなたの質問に直接答えるものではありませんので、コメントとして残しておきますが、クラスをオン/オフするために 'touchstart'を使用していないのはなぜですか? [素子。その応答性の場合だけでなく、デスクトップ上で動作するようもののclasslist.toggle](http://caniuse.com/#feat=classlist)をクリックイベントは、おそらく、より安全であり、それはどこでもあなたのコードを理解され、タッチデバイス用のほとんどユビキタスサポートしています実行されます。また、nav要素はクロージャの外側にある必要があります。つまり、各イベントでDOMにクエリを実行しないようにします。 –

+0

@MattStyles - 私はclassList.toggleを試してみましたが、それは魔法のように動作します。提案していただきありがとうございます – Tom

答えて

1

あなたが記述動作は以下の原因が考えられ:あなたのJSで

あなたは-600を表すとともに、left CSSプロパティの値に差別あなたのnav要素のオン・オフ切り替え、のいくつかの種類を実装しようoffの値であり、0onの値を表す。

これらの状態の切り替えはうまくいくようですが、要素が正確に-600に初期化されていないとどうなりますか?最初のタップでは、常にelse節に入り、最初に-600に設定されます。これは、あなたの説明と同じように、最初のタップに効果的な視覚的効果はありません。 style.leftが-600ではなく、多分あなたの状態の間のよりダイナミックな差別化に向かって作業するときにインスタントテストのために

は、ちょうどそれonオンに周りのif-else節を入れ替える;)

0

私はこれを考えますあなたのスタイルシートにleftプロパティを設定していても、element.style.leftが空であるからです。代わりにelement.offsetLeftを使用できます。それが唯一のCSS要素のインラインスタイル属性で設定宣言ではなく、他の場所でスタイル規則から来たものを表しているのでPlease see here to how it works.

HTMLElement.style - MDN

スタイルプロパティは、一般的には要素のスタイルについての学習のために有用ではありません例えば、<head>セクションのスタイルルール、または外部スタイルシートなどです。要素のすべてのCSSプロパティの値を取得するには、代わりにwindow.getComputedStyle()を使用する必要があります。

関連する問題