2016-04-18 4 views
0

Ich versuche, eine UI app, die von Codepen-Benutzer Fabio Ottaviani gebaut wurde, anzupassen, indem ich seine grundlegenden Funktionen nehme und es in ein Bootstrap-Modal setze. Wenn es aus dem Modal entfernt wird, funktioniert es gut, aber wenn es im Modal platziert wird, funktioniert es das erste Mal und bricht dann, sobald es zurückgesetzt wird. Der Courser wird nicht einmal zum Zeiger/Zeiger, wenn die Benutzeroberfläche zurückgesetzt wird.Warum funktioniert meine UI-Anwendung nicht, wenn sie in einem Bootstrap-Modal verschachtelt ist?

var $play = $('.play'), 
 
    $detail = $('.detail'), 
 
    $movie = $('.movie', $detail), 
 
    $close = $('.close'); 
 

 
$('.movies .movie').click(function(){ 
 
    $movie.html($(this).html()); 
 
    $play.appendTo($movie); 
 

 
    $poster = $('.poster', this).addClass('active'); 
 

 
    $('.poster', $detail).css({ 
 
    top: $poster.position().top, 
 
    left: $poster.position().left, 
 
    width: $poster.width(), 
 
    height: $poster.height() 
 
    }).data({ 
 
    top: $poster.position().top, 
 
    left: $poster.position().left, 
 
    width: $poster.width(), 
 
    height: $poster.height() 
 
    }) 
 

 
    $detail.show(); 
 

 
    $('.poster', $detail).delay(10).queue(function(next) { 
 
    $detail.addClass('ready'); 
 

 
    next(); 
 
    }).delay(100).queue(function(next){ 
 
    $(this).css({ 
 
     top: '-10%', 
 
     left: '-6%', 
 
     width: 266, 
 
     height: 400 
 
    }); 
 
    next(); 
 
    }) 
 
}) 
 

 

 
/*-------------------- 
 
Close 
 
--------------------*/ 
 
function close(){ 
 
    console.log('asd'); 
 
    $p = $('.detail .poster'); 
 
    console.log($p) 
 
    $p.css({ 
 
    top: $p.data('top'), 
 
    left: $p.data('left'), 
 
    width: $p.data('width'), 
 
    height: $p.data('height'), 
 
    }) 
 
    $detail.removeClass('ready').delay(500).queue(function(next){ 
 
    $(this).hide(); 
 
    $poster.removeClass('active'); 
 
    next(); 
 
    }); 
 
} 
 

 
$close.click(close); 
 
$('body').click(function(e){ 
 
    $p = $(e.target).parents(); 
 
    if ($p.is('.app')){ 
 
    return false; 
 
    } else { 
 
    close(); 
 
    } 
 
})
/***********reset.css************/ 
 
div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,svg,symbol,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,output,ruby,section,summary,time,mark,audio,video { 
 
    margin:0; 
 
    padding:0; 
 
    border:0; 
 
    font-size:100%; 
 
    font:inherit; 
 
    vertical-align:baseline; 
 
} 
 
article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{ 
 
    display:block; 
 
} 
 
body {line-height:1; 
 
} 
 
ol,ul { 
 
    list-style:none 
 
} 
 
blockquote,q{ 
 
    quotes:none; 
 
} 
 
blockquote:before,blockquote:after,q:before,q:after{ 
 
    content:''; content:none; 
 
} 
 
table{ 
 
    border-collapse:collapse; 
 
    border-spacing:0; 
 
} 
 

 

 
/************style.css************/ 
 
/*-------------------- 
 
App 
 
--------------------*/ 
 

 
.app h2 { 
 
    color: #525661; 
 
    font-size: 17px; 
 
    box-shadow: inset 0 1px 0px rgba(0, 0, 0, 0.1); 
 
    padding: 20px 28px 0; 
 
    margin: -6px 0 0 0; 
 
} 
 

 
/*-------------------- 
 
Movies 
 
--------------------*/ 
 
.movies { 
 
    display: -webkit-box; 
 
    display: -webkit-flex; 
 
    display: -ms-flexbox; 
 
    display: flex; 
 
    padding: 8px 18px; 
 
} 
 
.movies .movie { 
 
    padding: 10px; 
 
    cursor: pointer; 
 
} 
 
.movies .movie .poster { 
 
    width: 100%; 
 
    margin-bottom: 6px; 
 
    border-radius: 4px; 
 
} 
 
.movies .movie .poster.active { 
 
    opacity: 0; 
 
} 
 
.movies .movie .title { 
 
    color: #525661; 
 
    margin-bottom: 4px; 
 
    font-size: 16px; 
 
} 
 
.movies .movie .info { 
 
    font-size: 11px; 
 
    opacity: .8; 
 
} 
 
.movies .movie .desc { 
 
    display: none; 
 
} 
 

 
/*-------------------- 
 
Detail 
 
--------------------*/ 
 
.detail { 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    width: 100%; 
 
    height: 100%; 
 
    z-index: 10; 
 
    padding: 37px 30px 30px 255px; 
 
    display: none; 
 
} 
 
.detail::before { 
 
    content: ''; 
 
    background: #fff; 
 
    position: absolute; 
 
    z-index: -1; 
 
    top: 0; 
 
    left: 0; 
 
    width: 100%; 
 
    height: 100%; 
 
    border-radius: 15px; 
 
    opacity: 0; 
 
    -webkit-transition: all 0.4s cubic-bezier(0.67, 0.13, 0.1, 0.81); 
 
    transition: all 0.4s cubic-bezier(0.67, 0.13, 0.1, 0.81); 
 
} 
 
.detail .close { 
 
    position: absolute; 
 
    top: 21px; 
 
    right: 22px; 
 
    width: 12px; 
 
    height: 12px; 
 
    cursor: pointer; 
 
    border: 6px solid #FFF; 
 
    box-sizing: content-box; 
 
    z-index: 10; 
 
} 
 
.detail .poster { 
 
    position: absolute; 
 
    z-index: 2; 
 
    top: -10%; 
 
    left: -6%; 
 
    height: 100%; 
 
    border-radius: 5px; 
 
    box-shadow: 0 5px 30px rgba(0, 0, 0, 0.2); 
 
    -webkit-transition: all 0.5s cubic-bezier(0.67, 0.13, 0.1, 0.81); 
 
    transition: all 0.5s cubic-bezier(0.67, 0.13, 0.1, 0.81); 
 
} 
 
.detail .title, 
 
.detail .info, 
 
.detail .desc, 
 
.detail .play, 
 
.detail .close { 
 
    -webkit-transform: translateX(-50px); 
 
      transform: translateX(-50px); 
 
    opacity: 0; 
 
    -webkit-transition: all 0.4s cubic-bezier(0.67, 0.13, 0.1, 0.81); 
 
    transition: all 0.4s cubic-bezier(0.67, 0.13, 0.1, 0.81); 
 
} 
 
.detail .close { 
 
    -webkit-transform: translateX(10px); 
 
      transform: translateX(10px); 
 
} 
 
.detail .title { 
 
    font-size: 35px; 
 
    font-weight: 300; 
 
    color: #525661; 
 
    margin-bottom: 5px; 
 
} 
 
.detail .info { 
 
    font-size: 11px; 
 
    opacity: 0; 
 
    margin-left: 2px; 
 
} 
 
.detail .desc { 
 
    margin-top: 30px; 
 
    font-size: 14px; 
 
    line-height: 1.6; 
 
} 
 
.detail .play { 
 
    background: -webkit-linear-gradient(0deg, #E4761F, #FF8B32); 
 
    background: linear-gradient(90deg, #E4761F, #FF8B32); 
 
    border: none; 
 
    border-radius: 20px; 
 
    color: #fff; 
 
    font-size: 12px; 
 
    line-height: 1.5; 
 
    padding: 8px 17px; 
 
    margin: 30px 0 0 -2px; 
 
    text-transform: uppercase; 
 
    z-index: 10; 
 
    outline: none !important; 
 
    cursor: pointer; 
 
    opacity: 0; 
 
} 
 
.detail .play svg { 
 
    vertical-align: middle; 
 
    position: relative; 
 
    top: -2px; 
 
    margin-right: 3px; 
 
} 
 

 
.detail.ready::before { 
 
    opacity: 1; 
 
} 
 
.detail.ready .info { 
 
    opacity: .8; 
 
} 
 
.detail.ready .poster { 
 
    opacity: 1; 
 
    -webkit-transition-duration: .5s; 
 
      transition-duration: .5s; 
 
} 
 
.detail.ready .title, 
 
.detail.ready .info, 
 
.detail.ready .desc, 
 
.detail.ready .play, 
 
.detail.ready .close { 
 
    -webkit-transform: translateX(0); 
 
      transform: translateX(0); 
 
    opacity: 1; 
 
    -webkit-transition-delay: 0s; 
 
      transition-delay: 0s; 
 
    -webkit-transition-duration: .5s; 
 
      transition-duration: .5s; 
 
} 
 
.detail.ready .title { 
 
    -webkit-transition-delay: .2s; 
 
      transition-delay: .2s; 
 
} 
 
.detail.ready .info { 
 
    -webkit-transition-delay: .3s; 
 
      transition-delay: .3s; 
 
} 
 
.detail.ready .desc { 
 
    -webkit-transition-delay: .4s; 
 
      transition-delay: .4s; 
 
} 
 
.detail.ready .play { 
 
    -webkit-transition-delay: .5s; 
 
      transition-delay: .5s; 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>Portfolio</title> 
 
    <!--modal--> 
 
    <script src="http://s.codepen.io/assets/libs/modernizr.js" type="text/javascript"></script> 
 

 

 
    <link rel="stylesheet prefetch" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css"> 
 

 
    <style> 
 
     /* NOTE: The styles were added inline because Prefixfree needs access to the styles and they must be inlined if they are on local disk! */ 
 
     
 
     .modal-open body { 
 
      -webkit-filter: blur(1px); 
 
      -moz-filter: blur(1px); 
 
      filter: blur(1px); 
 
     } 
 
     
 
     .modal-dialog .modal-content { 
 
      border-radius: 0; 
 
      box-shadow: none; 
 
      background-color: rgba(255, 255, 255, 0.9); 
 
      padding-left: 30px; 
 
      padding-right: 30px; 
 
     } 
 
     
 
     .modal-backdrop { 
 
      background-color: rgba(255, 255, 255, 0.6); 
 
     } 
 
     
 
     .columns { 
 
      column-count: 3; 
 
      column-gap: 20px; 
 
     } 
 
     
 
     img { 
 
      width: 100%; 
 
      cursor: pointer; 
 
     } 
 
    </style> 
 

 

 
    <script src="js/prefixfree.min.js"></script> 
 

 
    <link rel="stylesheet" href="css/reset.css"> 
 

 
    <link rel="stylesheet prefetch" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400"> 
 

 
    <link rel="stylesheet" href="css/style.css"> 
 

 

 

 

 
</head> 
 

 
<body> 
 
    <a href="#" data-toggle="modal" data-target="#modal">Open Modal</a> 
 
    <div class="modal fade" id="modal"> 
 
     <div class="modal-dialog"> 
 
      <div class="modal-content"> 
 
       <div class="modal-body"> 
 
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> 
 
        <div class="app"> 
 

 
         <legend>Most Popular Movies</legend> 
 
         <section class="movies"> 
 
          <div class="movie"> 
 
           <img src="http://movium.io/data/posters/eqFckcHuFCT1FrzLOAvXBb4jHwq.jpg" alt="" class="poster" /> 
 
           <div class="title">Room</div> 
 
           <div class="info"> 
 
            <span class="length">117 min</span> 
 
            <span class="year">2015</span> 
 
           </div> 
 
           <div class="desc"> 
 
            Jack is a young boy of 5 years old who has lived all his life in one room. He believes everything within it are the only real things in the world. But what will happen when his Ma suddenly tells him that there are other things outside of Room? 
 
           </div> 
 
          </div> 
 
          <div class="movie"> 
 
           <img src="http://movium.io/data/posters/lIv1QinFqz4dlp5U4lQ6HaiskOZ.jpg" alt="" class="poster" /> 
 
           <div class="title">Whiplash</div> 
 
           <div class="info"> 
 
            <span class="length">167 min</span> 
 
            <span class="year">2015</span> 
 
           </div> 
 
           <div class="desc"> 
 
            Under the direction of a ruthless instructor, a talented young drummer begins to pursue perfection at any cost, even his humanity. 
 
           </div> 
 
          </div> 
 
          <div class="movie"> 
 
           <img src="http://movium.io/data/posters/kqjL17yufvn9OVLyXYpvtyrFfak.jpg" alt="" class="poster" /> 
 
           <div class="title">Mad Max</div> 
 
           <div class="info"> 
 
            <span class="length">120 min</span> 
 
            <span class="year">2015</span> 
 
           </div> 
 
           <div class="desc"> 
 
            An apocalyptic story set in the furthest reaches of our planet, in a stark desert landscape where humanity is broken, and most everyone is crazed fighting for the necessities of life. Within this world exist two rebels on the run who just might be able to restore order. There's Max, a man of action and a man of few words, who seeks peace of mind following the loss of his wife and child in the aftermath of the chaos. 
 
           </div> 
 
          </div> 
 
          <div class="movie"> 
 
           <img src="http://movium.io/data/posters/5W794ugjRwYx6IdFp1bXJqqMWRg.jpg" alt="" class="poster" /> 
 
           <div class="title">The Revenant</div> 
 
           <div class="info"> 
 
            <span class="length">156 min</span> 
 
            <span class="year">2015</span> 
 
           </div> 
 
           <div class="desc"> 
 
            In the 1820s, a frontiersman, Hugh Glass, sets out on a path of vengeance against those who left him for dead after a bear mauling. 
 
           </div> 
 
          </div> 
 
         </section> 
 
         <div class="detail"> 
 
          <svg class="close"> 
 
           <use xlink:href="#close"></use> 
 
          </svg> 
 
          <div class="movie"> 
 

 
           <img src="http://movium.io/data/posters/eqFckcHuFCT1FrzLOAvXBb4jHwq.jpg" alt="" class="poster" /> 
 
           <div class="title">Room</div> 
 
           <div class="info"> 
 
            <span class="length">117 min</span> 
 
            <span class="year">2015</span> 
 
           </div> 
 
           <div class="desc"> 
 
            Jack is a young boy of 5 years old who has lived all his life in one room. He believes everything within it are the only real things in the world. But what will happen when his Ma suddenly tells him that there are other things outside of Room? 
 
           </div> 
 

 
           <button class="play"> 
 
            <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewbox="0 0 232.153 232.153" style="enable-background:new 0 0 232.153 232.153;" xml:space="preserve" width="10px" height="10px"> 
 
             <g id="Play"> 
 
              <path style="fill-rule:evenodd;clip-rule:evenodd;" d="M203.791,99.628L49.307,2.294c-4.567-2.719-10.238-2.266-14.521-2.266 c-17.132,0-17.056,13.227-17.056,16.578v198.94c0,2.833-0.075,16.579,17.056,16.579c4.283,0,9.955,0.451,14.521-2.267 l154.483-97.333c12.68-7.545,10.489-16.449,10.489-16.449S216.471,107.172,203.791,99.628z" fill="#FFFFFF" /> 
 
             </g> 
 
            </svg> play movie 
 
           </button> 
 

 

 

 
          </div> 
 
         </div> 
 
        </div> 
 

 
       </div> 
 
      </div> 
 
      <!-- /.modal-content --> 
 
     </div> 
 
     <!-- /.modal-dialog --> 
 
    </div> 
 
    <!-- /.modal --> 
 

 

 

 

 
    <!-- Icons --> 
 
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none;"> 
 
     <symbol id="close" viewbox="0 0 212.982 212.982"> 
 
      <g> 
 
       <path style="fill-rule:evenodd;clip-rule:evenodd;" d="M131.804,106.491l75.936-75.936c6.99-6.99,6.99-18.323,0-25.312 c-6.99-6.99-18.322-6.99-25.312,0l-75.937,75.937L30.554,5.242c-6.99-6.99-18.322-6.99-25.312,0c-6.989,6.99-6.989,18.323,0,25.312 l75.937,75.936L5.242,182.427c-6.989,6.99-6.989,18.323,0,25.312c6.99,6.99,18.322,6.99,25.312,0l75.937-75.937l75.937,75.937 c6.989,6.99,18.322,6.99,25.312,0c6.99-6.99,6.99-18.322,0-25.312L131.804,106.491z" fill="#525661" /> 
 
      </g> 
 
     </symbol> 
 
     <symbol id="ico-search"> 
 
      <path fill-rule="evenodd" clip-rule="evenodd" fill="#363a47" d="M14.769,14.769c-0.342,0.342-0.896,0.342-1.237,0l-3.756-3.756 
 
                    c-2.399,1.793-5.801,1.623-7.981-0.557c-2.392-2.392-2.392-6.271,0-8.663s6.271-2.392,8.662,0c2.18,2.181,2.35,5.583,0.557,7.981 
 
                    l3.756,3.756C15.11,13.873,15.11,14.427,14.769,14.769z M9.219,3.032c-1.709-1.709-4.479-1.709-6.188,0 
 
                    c-1.708,1.708-1.708,4.479,0,6.188c1.709,1.708,4.479,1.708,6.188,0C10.927,7.51,10.927,4.74,9.219,3.032z" /> 
 
     </symbol> 
 
    </svg> 
 
    <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script> 
 

 
    <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
 

 
    <script src="http://netdna.bootstrapcdn.com/bootstrap/3.1.0/js/bootstrap.min.js"></script> 
 
    <script src="js/index.js"></script> 
 

 

 

 

 
</body> 
 

 
</html>

Antwort

1

Sie haben eine Scoping-Ausgabe. Wenn an dem Konsolenprotokoll für die App suchst, merke ich den Fehler

$poster is undefined

Wenn bei Ihrem Code suchen sehe ich $ Plakat auf etwas wird, aber ist mit der $('.movies .movie') Klickfunktion scoped. Alles außerhalb dieser Funktion, die es verwenden muss, weiß nicht, was es ist.

Das Update auf das an der Spitze

$poster auf Ihre globalen Variablen Zugabe wäre

var $play = $('.play'), $detail = $('.detail'), $movie = $('.movie', $detail), $close = $('.close'), $poster;

+0

Das ist mein Problem gelöst, obwohl ich musste tatsächlich '$ Plakat = $ define (‚ Plakat‘)' zu Mach es zur Arbeit. Mir wurde klar, dass ich später im Konsolenprotokoll nicht nach Fehlern gesucht habe. Ich denke, es war in Ordnung, weil es sonst funktionierte. –

Verwandte Themen