2016-10-28 6 views
1

ここではちょっとしたことがあります。私はウェブ開発者にとって非常に新しいことを覚えておいてください。私は、テキストがクリックされたときにフェードインとスライドでビデオを開くようにしようとしています。私はそれがキャッシュされていない限り十分に滑らかではないjqueryのスライド関数を避けることができるようにiframeを使用しています。私は前にiframeを使用していないし、私は不必要なbehaivourに実行されています。リンクをクリックすると、「すべての動画」が開きます。 GIFを参照してください:ここiframeとトランジションを伴う不要なベhaビール

enter image description here

は私のコードです。わかりやすくするためにテキストを編集しました。

私が行ったことは、すべての動画には折りたたまれているクラスがあり、javascriptでは「オープン」のクラスが追加されています。しかし、私が言ったように、それはそれらのすべてを対象とするようです。どんな助けもありがたい。 P

HTML:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>test</title> 
    <link rel="stylesheet" type="text/css" href="styles.css"> 

</head> 
<body> 
<div id="wrap"> 

<p id="text"> Lorem ipsum dolor... 
    <span id="link1">link 1</span> 
    <span id="wrap1"> 
     <iframe id="frame" class="rect" src="iframe.html" scrolling="no" marginwidth=0 marginheight=0></iframe> 
    </span> 
....Lorem ipsum dolor... 
    <span id="link2">link 2</span> 
    <span id="wrap2"> 
     <iframe id="frame2" class="rect" src="iframe2.html" scrolling="no" marginwidth=0 marginheight=0></iframe> 
    </span> 
....Lorem ipsum dolor sit amet... 
</p> 

</div> 
    <script type="text/javascript" src="jquery.js"></script> 
    <script src="script.js" type="text/javascript"></script> 
</body> 
</html> 

CSS:

#wrap{ 
    margin: 100px auto; 
    width: 350px; 
} 

p{ 
    line-height: 2em; 
} 

iframe { 
    border:0 none; 
} 

.rect{ 
    float: left; 
    height: 0px; 
    width: 350px; 

    display: block; 
    margin: 0px; 
    padding: 0px; 

    opacity: 0; 

    transition-property: all; 
    transition-duration: 2s; 
    transition-timing-function: ease-in-out; 
} 

.open { 
    height: 200px; 
    width: 350px; 
    opacity: 1; 
} 

#link1{ 
    color: red; 
    cursor: pointer;  
} 

#link2{ 
    color: red; 
    cursor: pointer; 
} 

はJavaScript:

$(document).ready(function(){ 

    $("#link1").click(function(){ 


     if ($(".rect").hasClass("open")){ 

      $(".rect").removeClass("open"); 

      $("body").find("iframe").contents().find("#pasc").get(0).pause(); 

     } else { 

     $(".rect").addClass("open"); 

     $("body").find("iframe").contents().find("#vid1").get(0).play(); 
     } 
    }); 

    $("#link2").click(function(){ 


     if ($(".rect").hasClass("open")){ 

      $(".rect").removeClass("open"); 

      $("body").find("iframe").contents().find("#vid2").get(0).pause(); 


     } else { 

     $(".rect").addClass("open"); 

     $("body").find("iframe").contents().find("#vid2").get(0).play(); 
     } 
    }); 
    }); 

iframe1:

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript" src="script.js"></script> 
    <link rel="stylesheet" type="text/css" href="styles.css">  
</head> 
<body> 
    <video id="vid1" width="350" height="200" > 
     <source src="video1.mp4" type="video/mp4"> 
    </video> 
</body> 
</html> 

iframe2:

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript" src="script.js"></script> 
    <link rel="stylesheet" type="text/css" href="styles.css">  
</head> 
<body> 
    <video id="vid2" width="350" height="200" > 
     <source src="video2.mp4" type="video/mp4"> 
    </video> 
</body> 
</html> 
+0

。 '$(" body ")を変更してください。find( "iframe") 'から' $(this).next( "iframe") ' – eithed

答えて

1

Working fiddle

あなたが$(".rect")を使用する場合、あなたはそれがページ内のすべてのiframeをターゲットとあなたはここでの問題だということだろう$("body").find("iframe")を呼び出すとき、それはクラスrect、同じ事を持つすべての要素をターゲットます。だから、あなたが変数に格納し、ちょうどすべてのトリガするためにそれを使用することができます

$(this).next().find('.rect'); 

を:ので、あなたが使用してクリックlinkと関連iframeを参照するために、現在のオブジェクト$(this)を使用することができることを避けるために

その他の機能:

$("#link1").click(function(){ 
    var rect = $(this).next().find('.rect'); 

    if (rect.hasClass("open")) 
    { 
     rect.removeClass("open"); 
     rect.contents().find("#pasc").get(0).pause(); 
    } else { 
     rect.addClass("open"); 
     rect.contents().find("#vid1").get(0).play(); 
    } 
}); 

$("#link2").click(function(){ 
    var rect = $(this).next().find('.rect'); 

    if (rect.hasClass("open")) 
    { 
     rect.removeClass("open"); 
     rect.contents().find("#vid2").get(0).pause(); 
    } else { 
     rect.addClass("open"); 
     rect.contents().find("#vid2").get(0).play(); 
    } 
}); 

これが役に立ちます。

+0

ありがとうございます。これは役に立ちます。あなたは2つのiframeファイルを使用する必要がない方法があるかどうかを知ることになるでしょう...私はどちらにも両方のビデオを持てますか? tx – Paul

2

問題は、この行です:

$(".rect").addClass("open"); 

あなたが.rectクラスを持つすべての要素にopenクラスを追加しています。

あなたはあなたのような、唯一の特定のiframeをターゲットにすることができので、代わりにiframeのIDを使用する必要があります:あなたはすべてのiframeをターゲットにしているリンクをクリックすると

$("#frame2").addClass("open"); 
関連する問題