Javascript:将鼠标悬停在问题&如何有效地构建html?

时间:2014-11-20 21:32:43

标签: javascript jquery html css

我写了一个Javascript,触发了一个人与图像进行交互,但是我在处理我遇到的问题时遇到了一些困难。请看一下:)

以下是Javascript编写的内容:
1)当人打开页面时,他们看到的只是一组图像 2)当光标/鼠标悬停在图像 2a) info文字fadesIn的底部和右侧(.rotate )图片, 2b) grayscale效果从100%降低到10% 2c) .detail fadesIn位于页面右下角的固定位置 3)所有图片都与一个数字相关联。然后使用该数字使得每个图像可以具有其自己的内容& text / position: / color: / etc。

以下是我面临的问题:
1)当图像的位置设置为bottom时,当光标悬停在图像上时,图像会向上移动。
2)在悬停时,当光标悬停在图像文本上时,由于某种原因,它会反复fadesInfadesOut
3)如何将.detail设置为所有图片的页面bottom right 4)图像编号(设置为.rotate)如何放置在图像外部并从图像高度垂直居中?

以下是视觉/功能参考的jsfiddle:jsfiddle

提前谢谢!

JS

$('.targetDiv').hide();

$('.show').mouseover(function () {
    $('.targetDiv').hover();
    $('.info' + $(this).attr('target')).fadeIn();
});

$('.show').mouseout(function () {
    $('.targetDiv').fadeOut();
    $('.info' + $(this).attr('target')).fadeOut();
});

HTML

<div class="show" id="subject01" target="01">
    <div class="frontpage-img-wrap">
        <img src="http://i61.tinypic.com/fw3tpc.jpg" width="250" height="auto" alt="" />
    </div>
    <div class="targetDiv info01">
         <h2>Name</h2>

         <h4>Text</h4>

        <p class="rotate">Image Number</p>
        <p class="detail">Image Detail
            <br/>Detail
            <br/>More Detail.</p>
    </div>
</div>
<!-- END 01 -->
<div class="show" id="subject02" target="02">
    <div class="frontpage-img-wrap">
        <img src="http://i59.tinypic.com/ogeybn.jpg" width="150" height="auto" alt="" />
    </div>
    <div class="targetDiv info02">
         <h2>Name</h2>

         <h4>Text</h4>

        <p class="rotate">Image Number</p>
        <p class="detail">Image Detail
            <br/>Detail
            <br/>More Detail.</p>
    </div>
</div>
<!-- END 02 -->

CSS

*, html, body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, label, fieldset, input, p, blockquote, th, td {
    margin:0;
    padding:0
}
fieldset, img {
    border:0
}
h1, h2, h3, h4, h5, h6 {
    font-size:100%;
    font-weight:normal
}
a img {
    border:none
}
p, li h2, body, h4, h4 a {
    font-family:"Courier New", Courier, monospace;
    font-size: 12px;
    line-height: 18px;
    font-weight: normal;
    letter-spacing: 1px;
    overflow-x: hidden;
}
h2 {
    font-family:"Apercu Bold", sans-serif;
    text-transform: uppercase;
    font-weight: bold;
    letter-spacing: 2px;
    font-size: 11px;
    text-align: center;
}
h4 {
    text-transform: uppercase;
    text-align: center;
}
a {
    color: red;
    text-decoration: none;
}
header a:hover {
    border-bottom: 1px solid;
}
.frontpage-img-wrap, .img-placeholder, .image-wrapper-inner {
    margin: 0 0 18px;
}
.entry {
    text-align: center;
    position: absolute;
}
.frontpage-img-wrap {
    position: relative;
}
.frontpage-img-wrap img {
    margin: 0;
    display: block;
}
.rotate {
    -webkit-transform: rotate(-90deg);
    -moz-transform: rotate(-90deg);
    -ms-transform: rotate(-90deg);
    -o-transform: rotate(-90deg);
    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
    position: absolute;
    right: -45px;
    top:50%;
    font-size: 12px;
    line-height: 18px;
    font-family: monospace;
    letter-spacing: 1px;
    margin: 0;
}
.frontpage-img-wrap {
    display:block;
}
#subject01 {
    left: 50px;
    top: 50px;
    position: fixed;
}
#subject02 {
    right: 50px;
    bottom: 100px;
    position: fixed;
}
h6 {
    position: fixed;
    top:40%;
    margin: 0 auto;
    text-align: center;
    font-family: helvetica;
    font-size: 100px;
    font-weight: bold;
    font-style: normal;
}

2 个答案:

答案 0 :(得分:1)

仅解决您的淡入/淡出问题:

我真的建议使用纯CSS。 JS只会使它复杂化:

.targetDiv { opacity: 0; transition: opacity 0.5s linear; }

.frontpage-img-wrap:hover + .targetDiv { opacity: 1; }

所以不要hide()(创建display: none;)你的文字,但只是将不透明度降为0,设置一个过渡(对于那个漂亮的淡入淡出效果......确保使用供应商前缀使用transition),然后只要.frontpage-img-wrap悬停,就将不透明度提高到1。

修改

至于你的底部对齐元素:这是因为$('.targetDiv').hide();(翻译display: none;)在悬停时弹出...它需要保持大小。做我的CSS技巧只是关闭不透明度将让文本保持其大小。但是如果你必须使用JS,你需要设置整个.show元素的大小,这样它就不会在悬停时调整大小。

答案 1 :(得分:1)

您只能使用CSS解决所有问题JSBin here

新CSS

   .rotate {
      display:block;
      position:absolute;
      font-size: 12px;
      line-height: 18px;
      font-family: monospace;
      letter-spacing: 1px;
      margin: 0;
      text-align: center;
      top:45%;
      left:95%;
      height:18px;
      visibility: hidden;
      opacity:0;
      -webkit-transition: all 250ms linear;
      -o-transition: all 250ms linear;
      transition: all 250ms linear; 

      transform: rotate(-90deg);
      -webkit-transform: rotate(-90deg);
      -moz-transform: rotate(-90deg);
      -ms-transform: rotate(-90deg);
      -o-transform: rotate(-90deg);
      filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
  }
  .targetDiv { 
    position:absolute; 
    width:100%; 
    visibility: hidden;
    opacity:0;
    -webkit-transition: all 250ms linear;
    -o-transition: all 250ms linear;
    transition: all 250ms linear; 
  }

  .show:hover .targetDiv {
    visibility: visible;
    opacity:1;
  }  
  .show:hover .rotate {
    visibility: visible;
    opacity:1;
  } 

HTML更改

  • <p class="rotate"> ... </p>中取出targetDiv并将其移至frontpage-img-wrap

备注

  • position:absolute;width:100%解决了位于底部的div跳跃悬停

  • 淡入/淡出效果通过转化opacityvisibility

  • 完成
  • 更容易调试,因为您现在可以在开发人员工具中使用:hover状态

  • 旋转位置不准确 - 您可能需要使用JS计算图像高度,然后将旋转div的高度设置为图像宽度