javascript - 重新创建 Medium 的图像淡入淡出滚动效果

标签 javascript jquery html image

不幸的是,我不是一个 jQuery 大师,我正在尝试重新创建媒体上的图像淡入/模糊功能。这是一个例子 - https://medium.com/matter/76d9913c6011

如果您向下滚动页面,您会注意到一些图像在您滚动时逐渐淡入/淡出。在检查代码后,我注意到有两个版本的图像来创建效果,一个是常规版本,另一个是模糊版本。

据我所知,事情的设置是这样的:

<section class=
"section-bottom-center section-image-full section-using-canvas"
data-scroll="native">
    <div class="section-background" data-height="2130" data-image-id=
    "1*ladXngaMeWEqp1R18uSSQA.jpeg" data-scroll="post-section" data-width=
    "3200">
        <div class="section-background-image" style=
        "background-image: url(https://d262ilb51hltx0.cloudfront.net/max/700/gradv/29/81/40/1*ladXngaMeWEqp1R18uSSQA.jpeg);">
        </div><br>
    </div>

    <div class="section-inner layout-single-column">
        <p>SOME TEXT THAT FADES OVER THE IMAGE</p>
    </div>
</section>

我发现了一些 jQuery,不幸的是我不太理解它,所以我无法重新创建它。

var qm = function(a, b) {
  var c = '\x3cdiv class\x3d"section-background' + (a.hasFocus ? " media-has-focus" : "") + '"' + ("section-image-full" == a.imageLayout ? ' data-scroll\x3d"post-section"' : "") + 'data-image-id\x3d"' + (0,z.N)(a.backgroundImage.id) + '"', d;
  d = a.backgroundImage;
  d = (d.originalWidth ? ' data-width\x3d"' + (0,z.N)(d.originalWidth) + '"' : "") + (d.originalHeight ? ' data-height\x3d"' + (0,z.N)(d.originalHeight) + '"' : "") + (d.filter ? ' data-filter\x3d"' + (0,z.N)(d.filter) + '"' : "") + (d.backgroundSize ? ' data-image-style\x3d"' + (0,z.N)(d.backgroundSize) + '"' : "");
  c = c + d + "\x3e";
  c = "section-image-full" == a.imageLayout ? c + ('\x3cdiv class\x3d"section-background-image" style\x3d"background-image: url(' + (0,z.N)((0,z.P)(b.miroUrl)) + "/max/" + (0,z.N)("700".replace(ji, ki)) + "/gradv/29/81/40/" + (0,z.N)(String(a.backgroundImage.id).replace(ji, ki)) + ');"\x3e\x3c/div\x3e\x3cbr\x3e') : "section-image-left" == a.imageLayout || "section-image-right" == a.imageLayout ? c + ('\x3cimg src\x3d"' + (0,z.N)((0,z.P)(b.miroUrl)) + "/max/" + (0,z.N)(b.postColumnWidth) + "/multiply/grey/" + 
  (0,z.N)(a.backgroundImage.id) + '"\x3e') : c + "\x3cbr\x3e";
  return c + "\x3c/div\x3e";
};

我确实注意到的一件事是,这两个图像不是简单地淡入/淡出 - 淡入淡出级别以某种方式与滚动绑定(bind),因此当您停止滚动时,图像会停止淡出。这是一个非常好的效果。

P.S 我希望尽可能简单地做到这一点,最好不使用 jQuery 插件。

谢谢

最佳答案

查看 Andreas Storm 在 Codepen 上的中等模糊滚动效果.

HTML:

<div class='blurImg'>
  <div style="background-image: url('https://d262ilb51hltx0.cloudfront.net/fit/c/1600/1280/gradv/29/81/60/darken/25/1*4ncz3hLxmL8E_bUh-0z62w.jpeg')"></div>
  <div class='blur' style="background-image: url('https://d262ilb51hltx0.cloudfront.net/fit/c/1600/1280/gradv/29/81/40/darken/50/blur/50/1*4ncz3hLxmL8E_bUh-0z62w.jpeg')"></div>
</div>
<header>
  <div>
    <h1>
      Medium
    </h1>
    <p>
      Everyone’s stories and ideas
    </p>
    <a href='https://medium.com/' title='Medium'>Learn more</a>
  </div>
  <nav role='navigation'>
    <ul>
      <li>
        <a class='active' href='#'>Reading List</a>
      </li>
      <li>
        <a href='#'>Bookmarks</a>
      </li>
      <li>
        <a href='#'>Top 100</a>
      </li>
    </ul>
  </nav>
</header>
<div class='container'>
  <div></div>
</div>

CSS:

body
  font-size 14px
  font-family Sans-Serif

*
  box-sizing border-box

a
  text-decoration none

.blurImg
  position relative
  width 100%
  height 440px
  z-index -1
  top 0
  left 0
  & > div
    position fixed
    width 100%
    height 440px
    background-repeat no-repeat
    background-size cover
    background-position center center

.blur
  opacity 0

header
  z-index 1
  position absolute
  top 0
  width 100%
  padding 0px 20px
  & > div
    max-width 600px
    margin 0 auto
    padding-top 150px
    height 380px
    text-align center
    color White
    a
      font-size 0.8em
      letter-spacing 0.08em
      color rgba(255,255,255,0.85)
      line-height 30px
      padding 7px 14px
      border 1px solid rgba(255,255,255,0.3)
      border-radius 2em
      transition all 0.3s ease
      &:hover
        background white
        color Gray
  p
    font-size 1.5em
    margin-bottom 0.7em
    font-family Times New Roman

h1
  font-weight 800
  font-size 3.4em
  margin-bottom 0.2em

nav
  max-width 600px
  margin 0 auto
  height 60px
  border-top 1px rgba(255,255,255,0.35) solid
  ul
    li
      display inline-block
      margin-right 20px
      a
        font-weight 800
        font-size 11px
        text-transform uppercase
        letter-spacing .2em
        color rgba(255,255,255,0.5)
        transition color 0.3s linear
        line-height 60px
        display block
        &.active
          box-shadow 0px -1px 0px white

nav ul li a.active, nav ul li a:hover
  color white

.container
  height 1300px
  background white
  z-index 1
  padding 0px 20px
  div
    max-width 600px
    margin 0 auto
    padding-top 40px

CoffeeScript :

$(window).scroll ->
  oVal = ($(window).scrollTop() / 240)
  $(".blur").css "opacity", oVal

关于javascript - 重新创建 Medium 的图像淡入淡出滚动效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21770821/

相关文章:

javascript - 尝试在简单的 HTML 和 JavaScript Trivia 游戏上显示分数

html - CSS动画,淡入淡出自动幻灯片不透明度

javascript - 将外部 javascript 内容显示为 html 页面中的文本

javascript - 我想保持以下 Accordion 的过渡效果

javascript - Android Webview 无法直接通过 getElementById().click() 重定向到网站

javascript - AngularJS 中的 jQuery .one() 等价于什么?

javascript - 在 bootstrap-tabdrop 中重新排序选项卡

javascript - 如何使用 AJAX 和 jQuery 发布 Django 表单

javascript - 单击下拉菜单时将复选框设置为未选中

html - 可以选择的 Bootstrap 可滚动列