2016-10-25 2 views
0

어떤 이유로 사용자가 링크에서 여러 번 클릭하지 못하게하는 것처럼 보일 수 없습니다. 사용자가 묶음을 클릭하면 이미지가 앞뒤로 번지 게됩니다. 내가 뭘 잘못하고 있는지 생각해?실행 중 기능이 여러 번 실행되지 않는 경우

$(document).ready(function() { 
 
    console.log("Welcome to my portfolio. Glad you made it!"); 
 
    $(".nav-bar ul li").click(function() { 
 
    var image = $(".nav-move"); 
 
    var link = $(this); 
 
    var running = false; 
 
    var imagePos = $(".nav-move").position().left; 
 
    var linkPos = $(this).position().left; 
 
    var count = 0; 
 

 
    if (imagePos < linkPos && running == false) { 
 
     console.log(imagePos + ", " + linkPos + ", " + link.width()); 
 
     right(); 
 
     running = true; 
 
    } else if (imagePos > linkPos && running == false) { 
 
     console.log(imagePos + ", " + linkPos + ", " + link.width()); 
 
     left(); 
 
     running = true; 
 
    } 
 

 
    function right() { 
 
     count++; 
 
     image.css({ 
 
     "left": imagePos + count + "px" 
 
     }) 
 
     imagePos = $(".nav-move").position().left; 
 
     if (imagePos + (image.width()/2) < linkPos + (link.width()/2)) { 
 
     setTimeout(right, 20); 
 
     } else { 
 
     running == false 
 
     } 
 
    } 
 

 
    function left() { 
 
     count--; 
 
     image.css({ 
 
     "left": imagePos + count + "px" 
 
     }) 
 
     imagePos = $(".nav-move").position().left; 
 
     if (imagePos + (image.width()/2) > linkPos + (link.width()/2)) { 
 
     setTimeout(left, 20); 
 
     } else { 
 
     running == false 
 
     } 
 
    } 
 
    }) 
 
});
.nav-bar { 
 
    position: absolute; 
 
    bottom: 0; 
 
    padding: 10px 0 30px; 
 
    background: #000; 
 
    color: #fff; 
 
} 
 
.nav-bar ul { 
 
    padding: 0; 
 
    margin: 0; 
 
    display: flex; 
 
    justify-content: space-around; 
 
} 
 
.nav-bar ul li { 
 
    display: inline; 
 
    padding: 0; 
 
    font-size: 35px; 
 
    font-weight: bold; 
 
    font-family: 'Indie Flower', cursive; 
 
} 
 
.nav-bar ul .sub-item { 
 
    display: none; 
 
} 
 
.main-content { 
 
    background: #fff; 
 
} 
 
.nav-move { 
 
    position: absolute; 
 
    padding: 0px; 
 
    margin: -10px; 
 
} 
 
.guy-running { 
 
    display: none; 
 
} 
 
/*# sourceMappingURL=style.css.map */
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>Portfolio Page</title> 
 
    <!-- JQuery --> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 

 
    <!-- BOOTSTRAP --> 
 
    <!-- Latest compiled and minified CSS --> 
 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 
 
    <!-- Optional theme --> 
 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> 
 
    <!-- Latest compiled and minified JavaScript --> 
 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> 
 

 
    <!-- FONTS --> 
 
    <link href="https://fonts.googleapis.com/css?family=Indie+Flower" rel="stylesheet"> 
 
    <!-- Stylesheet --> 
 
    <link rel="stylesheet" href="stylesheets/style.css"> 
 
    <!-- Javascript Files --> 
 
    <script type="text/javascript" src="js/home.js"></script> 
 
</head> 
 

 
<body> 
 
    <div class="container-fluid"> 
 
    <div class="row"> 
 
     <div class="col-md-9 main-content"> 
 
     <!-- Home --> 
 
     <div class="home-content"> 
 
      Test Home-Content 
 
     </div> 
 
     <!-- About --> 
 
     <div class="about-content"> 
 
      Test About-Content 
 
     </div> 
 
     <!-- Portfolio --> 
 
     <div class="portfolio-content"> 
 
      Test Portfolio-Content 
 
     </div> 
 
     <!-- Contact --> 
 
     <div class="contact-content"> 
 
      Test Contact-Content 
 
     </div> 
 
     </div> 
 
    </div> 
 
    <div class="row"> 
 
     <div class="col-xs-12 nav-bar"> 
 
     <ul> 
 
      <li>Home</li> 
 
      <li>About</li> 
 
      <li>Portfolio 
 
      <ul class="sub-item"> 
 
       <li>Item 01</li> 
 
       <li>Item 02</li> 
 
       <li>Item 03</li> 
 
      </ul> 
 
      </li> 
 
      <li>Contact</li> 
 
     </ul> 
 
     <div class="images"> 
 
      <img class="nav-move" src="assets/nav-img.png" alt=""> 
 
      <img class="guy-running" src="assets/guy-running.gif" alt=""> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 

 
</body> 
 

 
</html>

PS : 어떤 이유로, 아래 링크를 이미지를 중심으로하는 것은 중 하나가 작동하지 않습니다/질문과 관련이 있지만, 단지 보조 노트 없습니다.

+0

가능한 중복 http://stackoverflow.com/questions/14969960/jquery-click-events-firing-multiple -times) –

답변

0

만드는 시도하여 running 변수 글로벌 :

$(document).ready(function() { 
    var running = false; 
    console.log("Welcome to my portfolio. Glad you made it!"); 
    $(".nav-bar ul li").click(function() { 
    var image = $(".nav-move"); 
    var link = $(this); 
    var imagePos = $(".nav-move").position().left; 
    var linkPos = $(this).position().left; 
    var count = 0; 

    if (imagePos < linkPos && running == false) { 
     console.log(imagePos + ", " + linkPos + ", " + link.width()); 
     right(); 
     running = true; 
    } else if (imagePos > linkPos && running == false) { 
     console.log(imagePos + ", " + linkPos + ", " + link.width()); 
     left(); 
     running = true; 
    } 

    function right() { 
     count++; 
     image.css({ 
     "left": imagePos + count + "px" 
     }) 
     imagePos = $(".nav-move").position().left; 
     if (imagePos + (image.width()/2) < linkPos + (link.width()/2)) { 
     setTimeout(right, 20); 
     } else { 
     running = false 
     } 
    } 

    function left() { 
     count--; 
     image.css({ 
     "left": imagePos + count + "px" 
     }) 
     imagePos = $(".nav-move").position().left; 
     if (imagePos + (image.width()/2) > linkPos + (link.width()/2)) { 
     setTimeout(left, 20); 
     } else { 
     running = false 
     } 
    } 
    }) 
}); 
[여러 번 발사 jQuery를 클릭 이벤트] (의
+0

무엇인가의 이유 때문에 'running'을 false로 설정하지 않습니다. 일단 실행되면 페이지를 새로 고치지 않으면 다시 실행되지 않습니다. 또한 글로벌 범위에 있어야하는 이유는 무엇입니까? 동일한 범위 내에 있지 않습니까? –

+0

방금 ​​'=='쌍을 사용하는 것으로 나타났습니다. 이들은 비교를 위해 사용되었습니다. 값을 지정하는 것이 아닙니다. 나는 js의 나의 버전을 정정했다. 소용돌이 치다. – UltrasoundJelly

+0

아, 변수 범위가 문제가되는 것은 각 클릭에 대해 변수를 false로 다시 초기화한다는 것이 었습니다. – UltrasoundJelly

관련 문제