如何在悬停时滚动到图像的底部

时间:2017-10-10 15:43:46

标签: jquery html css image

您好我很想知道能够在悬停时滚动到图像底部的最佳方式。图像在一个包装器中,溢出隐藏应用于它,因为它很长。理想情况下,滚动到底部的平滑滚动是我正在寻找隐藏图像的其余部分。

我一直在玩jquery试图让它工作,但我陷入困境。不确定我是否使用我的代码在正确的轨道上。

感谢任何帮助

$('#image-wrap img').on('hover', function() {
  var target = $(this),
    height = target.height(),
    scrollHeight = target.prop('scrollHeight');

  target.animate({
    scrollTop: scrollHeight - height
  }, 2000);
});
#main-wrapper {
  width: 600px;
  margin: 0 auto;
}

#box-wrapper {
  position: relative;
}

#box {
  width: 100%;
  height: 400px;
  border: 1px black solid;
  position: relative;
}

#image-wrap {
  overflow: hidden;
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
}

#image-wrap img {
  position: absolute;
  top: 0;
  width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="main-wrapper">
  <div id="box-wrapper">
    <div id="box">
      <div id="image-wrap">
        <img src="http://via.placeholder.com/600x2000" />
      </div>
    </div>
  </div>
</div>

5 个答案:

答案 0 :(得分:3)

你可以简单地使用CSS3。在悬停时添加转换transform: translateY(-100%),但它不像jquery解决方案那样聪明。

#main-wrapper {
  width: 600px;
  margin: 0 auto;
}

#box-wrapper {
  position: relative;
}

#box {
  width: 100%;
  height: 400px;
  border: 1px black solid;
  overflow: hidden;
}

img {
    transition: all 2000ms ease-out;
}

#box:hover img {
    transform: translateY(-100%);
}
<div id="main-wrapper">
  <div id="box-wrapper">
    <div id="box">
        <img src="http://lorempixel.com/400/1000/sports/" />
    </div>
  </div>
</div>

答案 1 :(得分:1)

我现在明白你希望它如何。

HTML

$(document).ready(function(){
  $('#img-holder').mouseenter(function(){
    var x = $('img').height();
    x = x-400;
    $('img').animate({'position':'absolute','top':'-'+x}, 300);
  });
   $('#img-holder').mouseleave(function(){
     $('img').css({'position':'relative','top':'0'});
   });
});
#img-holder{
  width:100%;
  height:400px;
  border:2px solid;
  overflow:hidden;
  position:relative;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="img-holder">
  <img src="https://blog.hittail.com/wp-content/uploads/sites/8/2013/01/hidden-value-of-long-tail-seo-1000.png" width="100%">
</div>

这个想法是使img的位置绝对,并给它一个值来显示底部。

这是一个有效的DEMO

答案 2 :(得分:0)

请尝试以下方法:

&#13;
&#13;
$('#image-wrap img').hover(function() {
  $('html, body').animate({
        scrollTop: $(this).offset().top + $(this).outerHeight()
    }, 2000);
});
&#13;
#main-wrapper {
  width: 600px;
  margin: 0 auto;
}

#box-wrapper {
  position: relative;
}

#box {
  width: 100%;
  height: 400px;
  border: 1px black solid;
  position: relative;
}

#image-wrap {
  overflow: hidden;
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
}

#image-wrap img {
  position: absolute;
  top: 0;
  width: 100%;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="main-wrapper">
  <div id="box-wrapper">
    <div id="box">
      <div id="image-wrap">
        <img src="http://via.placeholder.com/600x2000" />
      </div>
    </div>
  </div>
</div>
&#13;
&#13;
&#13;

答案 3 :(得分:-1)

如果图像被隐藏,则无法与其进行交互。如果它可见,你可以像这样使用scrollTo()。

  1. 使用scrollTop()

    捕获当前滚动位置

    var pos = $('你的形象容器')。scrollTop();

  2. 抓住图像容器的高度

    var height = $('你的形象容器')。height();

  3. 添加两个值

    var moveto = pos + height;

  4. 自动滚动到位置

    window.scrollTo(0,moveto);

答案 4 :(得分:-2)

所以我想你想滚动整个页面(有点像使用你的鼠标滚轮)?

你可以这样做:

$('#image-wrap img').on('hover', function() {
  var target = $(this),
    height = target.height(),
    scrollHeight = target.offset().top;

    $('body,html').animate({
         scrollTop:scrollHeight+height-500
    },500);
});

然后滚动页面,这样可以看到最后500px的图像。如果这不能解决您的问题,整个页面的示例将会有所帮助。