2016-06-28 10 views
0

クリックしたときにページの上部にスクロールするクラス「scrollToTop」を持つボタンがあります。ここでJSファイルがあります:jqueryで要素のフォーカスを失うようにする

$(document).ready(function(){ 

    //Check to see if the window is top if not then display button 
    $(window).scroll(function(){ 
    if ($(this).scrollTop() > 100) { 
     $('.scrollToTop').fadeIn(); 
    } else { 
     $('.scrollToTop').fadeOut(); 
    } 
    }); 

    //Click event to scroll to top 
    $('.scrollToTop').click(function(){ 
    $('html, body').animate({scrollTop : 0},800); 
    return false; 
    }); 


}); 

だから、このボタンもあります。プロパティを置く:

.scrollToTop:hover{ 
    opacity: 1.0; 
    box-shadow: 0 10px 20px rgba(0,0,0,0.25), 0 8px 8px rgba(0,0,0,0.22); 
    -webkit-transition: all 0.4s ease-in-out; 
    -moz-transition: all 0.4s ease-in-out; 
    -o-transition: all 0.4s ease-in-out; 
    transition: all 0.4s ease-in-out; 
} 

、我々はすべて知っているように:ホバーは、モバイルデバイスではうまく動作しません。つまり、1)あなたが持っていますボタンをクリックして不透明度を1.0に変更します& 2)不透明度を前の状態に戻すために別の場所でタップしなければなりません(0.5とします)。

ここでは、2番目の部分をシミュレートしたいと考えています。 jqueryを編集して、ページが上にスクロールされると、scrollToTopが自動的にフォーカスを失うので、:ホバー効果が失われ、不透明度が0.5に自動的に戻ります。私は自分自身を明確にしたいと思う。これは可能ですか?そうでない場合、同じ結果を得る他の方法はありますか?前もって感謝します!

$('.scrollToTop').blur(); 

だからあなたがそれを置くことができます:私はこの権利を持っていれば

+0

私はあなたが別の要素に集中することができると思いますent。 –

+1

私はあらゆる種類のデバイスを使うと思いますが、擬似クラス ':hover'ではなく、クラスを切り替える方がよいでしょう。欠点は、mouseenter/mouseleaveに関するロジックがjs/jqueryを使用して処理する必要があることです。しかし、それは必要に応じてクラスを削除するだけです。今私は ''と 'document.body.focus();'を設定するのがうまくいくかどうか疑問に思っていますか? –

+1

'scrollToTop'クラスの削除、読み込みを試みる他のアイデアです。たとえば、クリックハンドラーの内部では、$(this).removeClass( 'scrollToTop')。addClass( 'scrollToTop'); '。最後の1つのアイデアは、クリックハンドラのような再描画を強制することです: '$(this).hide()。show(0);' –

答えて

0

が、私はあなたが使用する必要があると思うまた

$('.scrollToTop').click(function(){ 
    // Remove focus from the button 
    $('.scrollToTop').blur(); 
    $('html, body').animate({scrollTop : 0},800);   
    return 
}); 

、別のStackOverflowのquestionはontouchendイベントを使用することを提案していますDOMに要素を削除して再度追加する:

$('.scrollToTop').on('touchend', function(){ 
    var el = this; 
    var par = el.parentNode; 
    var next = el.nextSibling; 
    par.removeChild(el) 
    setTimeout(function() { 
     par.insertBefore(el, next); 
    },0); 
}); 
関連する問題