2017-03-09 6 views
1

私は単純な在庫アプリケーションを作成していますが、現在在庫のあるアイテムをすべて一覧表示するテーブルがあります。ユーザーが各アイテムの説明にカーソルを合わせると、各アイテムのイメージが表示されますが、リストにはさまざまなアイテムがあり、それぞれに独自の画像があります。私は以下の項目でいくつかのコードをテストしていましたが、両方の項目の画像のみが表示されるため正しく動作しません。テキストの上にカーソルを置くと画像が表示されます

リストにあるアイテムごとに異なる画像を表示するにはどうすればよいですか?

HTML

<li> 
<a href="#">Get Well</a> 
<div class="place-image"><img src="../img/Get%20Well.jpg"></div> 
</li> 

<li> 
<a href="#">I Love You</a> 
<div class="place-image"><img src="../img/I%20Love%20You.jpg"></div> 
</li> 

Javascriptを

$('a').hover(
function() { 
    $('.place-image').fadeIn('slow'); 
},function() { 
    $('.place-image').fadeOut('slow'); 
} 
); 
+0

私は、あまりにも多くのコードと手作業のメンテナンスが必要と考えています。それはどうですか? –

答えて

1

最良の方法は、あなただけのjQueryを使用することです。

  1. リンクプロジェクトにjQueryライブラリ、ヘッダータグ内に配置
  2. コード

$(".Your_class").mouseenter(function(){ 
 
     var image_name=$(this).data('image'); 
 
     var imageTag='<div style="position:absolute;">'+'<img src="'+image_name+'" alt="image" height="100" />'+'</div>'; 
 
     $(this).parent('div').append(imageTag); 
 
    }); 
 
    $(".Your_class").mouseleave(function(){ 
 
     $(this).parent('div').children('div').remove(); 
 
    });
<html> 
 
<head> 
 
<title>Bikash Test</title> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
</head> 
 
<div> 
 
    <a class="Your_class" href="#" data-image="http://www.claraapollo.com/wp-content/uploads/2017/01/images.duckduckgo-3.jpg">Show Image</a> 
 
</div> 
 
<div style="margin-left:250px;"> 
 
    <a class="Your_class" href="#" data-image="http://www.therocks.com/media/52168/The_Rocks_Discovery_Museum_exterior.jpg">Another Image</a> 
 
</div> 
 
</body> 
 
</html>

  1. データ・イメージに従ってください:あなたのイメージを-keep名前はここに
  2. アプリを渡すdiv(imageTag文字列)にスタイルを適用するfi
0

HTML

<div class="hover_img"> 
<span><img src="images/01.png" alt="image" height="100" /></span 
<a href="#">Show Image</a> 
</div> 

CSS

.hover_img a { position:relative; } 
.hover_img span { position:absolute; display:none; z-index:99; } 
.hover_img a:hover span { display:block; } 

それを試してみてください...あなたは決して両方を同じ要素に入れないでください

1

最初にcss display:noneを使用して画像を隠しておきます。マウスオーバーでJquery mouse overイベントを表示すると、マウスが再び表示されます。

$("#id").mouseenter(function() { 
    // code here 
}); 

$("#outer").mouseout(function() { 
    // code here 
}); 
3

ちょっとお勧めしますが、通常は破壊するのではなく隠す方がいいです、ブラウザはあなたに感謝します。

なぜですか?表示ブロックをnoneに設定するか、またはnoneにすると、ブラウザは要素を破棄して再度レンダリングする必要があります。あなたがそれを隠すだけで、ブラウザはそれを配置するだけです。

HTML

<a href="#"><div class="hover-img"> 
    Show Image 
    <span><img src="http://placehold.it/150x150" alt="image" height="100" />  </span> 
</div></a> 

CSS

a .hover-img { 
    position:relative; 
} 
a .hover-img span { 
    position:absolute; left:-9999px; top:-9999px; z-index:9999; 
} 
a:hover .hover-img span { 
    top: 20px; 
    left:0; 
} 

は、それはあなたがそれをより再利用可能とメンテナンス性にするために、JavaScriptを使用したいことを考えると、一方https://jsfiddle.net/b5Lvq7yL/

を実行している参照してください。このアイデアをいくつかの一般的なCSSと組み合わせて、後でそのソフトウェアの他のセクション(または他のpr

実際、あなたは一般化することができます。

トリガセレクタ ".onhover-toggle-child-class"を持つことができます。これは、 "data-target"から子を取り出し、マウスが出入りするたびに "data-toggle"のクラスを切り替えます。

あなたが持っている同じHTMLを使用して

が、他のCSSクラス

<div> 
    <a href="#" class="relative onhover-toggle-child-class" data-target=".target" data-toggle="hidden shown">Show Image 
    <span class="absolute target hidden on-top"> 
     <img src="http://placehold.it/150x150" alt="image" height="100" /> 
    </span> 
    </a> 
</div> 

<div> 
    <a href="#" class="relative onhover-toggle-child-class" data-target=".target2" data-toggle="hidden shown">Show Image 
    <span class="absolute target2 on-top hidden"> 
     <img src="http://placehold.it/150x150" alt="image" height="100" /> 
    </span> 
    </a> 
</div> 

いくつかのスーパージェネリックCSS

.on-top { 
    z-index: 99; 
} 

.relative { 
    position: relative; 
} 
.absolute { 
    position: absolute; 
} 

.shown { 
    display: block; 
} 

.hidden { 
    display: none; 
} 

と(jQueryのを使用して)いくつかのjavascript

$('.onhover-toggle-child-class').on(
    'mouseenter mouseleave', 
    function() { 
    var element = $(this); 
    var selector = element.data('target'); 
    var child = element.find(selector); 
    var classes = element.data('toggle'); 


    child.toggleClass(classes); 
    } 
); 

それとも、あなたはJavaScriptをvainilla使用したい場合:

var queried = document.querySelectorAll('.onhover-toggle-child-class'); 
var elements = Array.prototype.slice.call(queried); 
var onhover = function(event) { 
    var element = event.srcElement || event.target; 
    var selector = element.getAttribute('data-target'); 
    var classes = element.getAttribute('data-toggle').split(' '); 
    var childs = element.querySelectorAll(selector); 
    //console.log(selector, classes, childs); 
    childs.forEach(function(child) { 
    classes.forEach(function(toggleClass) { 
    if (child.classList.contains(toggleClass)) 
     child.classList.remove(toggleClass); 
    else 
     child.classList.add(toggleClass); 
    }); 
    }); 
} 

elements.forEach(function(element) { 
    element.addEventListener('mouseenter', onhover); 
    element.addEventListener('mouseleave', onhover); 
}); 

両方の例は、作業を参照してください:https://jsfiddle.net/kg22ajm6/

あなたは"fadeIn"をaにするためにopacity:0とopacity:1を使用するクラスを作成できますnd "fadeOut" CSSは通常、生のJavascriptやjQuery、jQueryのfadeInやfadeOutを手動でアニメーション化したり、CSSトランジションをブラウザに組み込んだりするのに適しています。

チェック不透明度のアニメーションを使用した例:https://jsfiddle.net/Lwcbn0ae/1/

よろしく、

関連する問題