как убрать скачек экрана вверх при клике на ссылку?

151
24 марта 2019, 16:50

Есть такой кусок кода. Это табы, и при клике по переключателю страничка подпрыгивает, я допер почему она подпрыгивает, из-за значка #, так вот вопрос к знатокам, как это действие (подпрыгивание) убрать. А то на мобильной версии вообще жесть происходит

$(function() { 
  var t = 1; 
 
  function switchTabs() { 
    if (t > 3) t = 1; 
    console.log("switchTabs - ", t); 
    if (t == 1) $('a.my-tab[href="#tabs-1"]').click(); 
    if (t == 2) $('a.my-tab[href="#tabs-2"]').click(); 
    if (t == 3) $('a.my-tab[href="#tabs-3"]').click(); 
    t++; 
  } 
  var sw_tabs_timer1 = window.setInterval(switchTabs, 1000); 
 
  $('a.my-tab').click(function(e) { 
    if (e.originalEvent && e.originalEvent.isTrusted && sw_tabs_timer1) { 
      sw_tabs_timer1 = clearInterval(sw_tabs_timer1); 
      console.log("stopped switchTabs"); 
    } 
  }); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="tabs"> 
  <ul class="tabNavigation"> 
    <li><a class="my-tab" href="#tabs-1">1</a></li> 
    <li><a class="my-tab" href="#tabs-2">2</a></li> 
    <li><a class="my-tab" href="#tabs-3">3</a></li>     
  </ul> 
  <div id="tabs-1"> 
    img 
  </div> 
  <div id="tabs-2"> 
    img 
  </div> 
  <div id="tabs-3"> 
    img 
  </div> 
   
</div>

Answer 1

Строка с // !!! в скрипте:

$(function() { 
  var t = 1; 
 
  function switchTabs() { 
    if (t > 3) t = 1; 
    //console.log("switchTabs - ", t); 
    if (t == 1) $('a.my-tab[href="#tabs-1"]').click(); 
    if (t == 2) $('a.my-tab[href="#tabs-2"]').click(); 
    if (t == 3) $('a.my-tab[href="#tabs-3"]').click(); 
    t++; 
  } 
  var sw_tabs_timer1 = window.setInterval(switchTabs, 1000); 
 
  $('a.my-tab').click(function(e) { 
    if (e.originalEvent && e.originalEvent.isTrusted) { 
      e.preventDefault(); // !!! 
      if (sw_tabs_timer1) { 
        sw_tabs_timer1 = clearInterval(sw_tabs_timer1); 
        //console.log("stopped switchTabs"); 
      } 
    } 
  }); 
});
.block { 
  border:1px solid black; 
  background: lightgreen; 
  height:100px; 
  margin-bottom:5px; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="tabs"> 
  <ul class="tabNavigation"> 
    <li><a class="my-tab" href="#tabs-1">1</a></li> 
    <li><a class="my-tab" href="#tabs-2">2</a></li> 
    <li><a class="my-tab" href="#tabs-3">3</a></li> 
  </ul> 
 
  <div class="block"></div> 
  <div class="block"></div> 
 
  <div id="tabs-1"> 
    img 
  </div> 
  <div id="tabs-2"> 
    img 
  </div> 
  <div id="tabs-3"> 
    img 
  </div> 
</div>

Answer 2

Проблемму скачков решил, не потеряв изначально задвнных параметров по автоматичскому переключению табов. Прописал действие onclick="return false;" непосредственно в код HTML

<li><a class="my-tab" onclick="return false;" href="#tabs-1">1</a></li>

READ ALSO
Как может выглядеть Ajax отправка формы без jQuery?

Как может выглядеть Ajax отправка формы без jQuery?

Есть типовой скрипт отправки писем на jQuery HTML:

158
Как лучше сделать блюр в Canvas ?

Как лучше сделать блюр в Canvas ?

Может кто сталкивался с таким кейсом или может есть какая то либа максимально приближенная к задаче ?

162
Анимация не производится JQurey

Анимация не производится JQurey

Решил сделать самую простою анимацию появления текста методом $("span")show("slow");

148
Array.push - &ldquo;Maximum call stack size exceeded&rdquo; из за простого Math.random(). Почему?

Array.push - “Maximum call stack size exceeded” из за простого Math.random(). Почему?

Есть код, генерирующий массив из 10`000 случайных целых чисел от 0 до 1`000`000`000

168