首页 > 代码库 > 整屏滚动

整屏滚动

最近一周写了一个pc端自适应的下载推广页面。

第一次做自适应的页面,在此记录一些体会。

首先我拿到的AI设计图纸是1920*1080的分辨率的。

和普通的定宽页面相比,在自适应的页面中,宽度设定为100%,高度需要通过js调节,通过获取视口的高度。再为每一个整屏页面赋值。在项目中我设定页面的最小高度为600px。pc端大概也没有分辨率低于这个数字的了吧。

var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
if (height < 600) height = 600

然后页面中在布局的时候需要将1080p下的分辨率转化为rem。然后通过css的@media修改页面的基础font-size从而达到目的。

@media screen and (max-width: 1024px) {
  html {
    font-size: 62.5% !important;
  }

}

图片的部分,注意background-size要使用contain属性。然后每一页要设置好底色。为了保证在类似1000*1400的比例下还能达到一屏一页的效果。图片容器的高度可以设置成100%,然后通过background的size和position属性使其居中。这样就会有一个不错的效果。

最后,为了达到页面整屏滚动的目的。再使用js。

$(document).ready(function () {
  reloadHeight()
  var isfinish = true
  var scrollFunc = function () {
  var height = getHeight()
  // 当前页面为第X页面 为防止页面刚好超过1.2px。
  var level = Math.floor((window.pageYOffset+20)/height)
  var newScrollTop
  if (event.wheelDelta < 0) {
    if (level === 4) return
    level += 1
  } else {
    if (level === 0) return
    level -= 1
  }
  if (isfinish) {
    isfinish = false
    newScrollTop = level * height
    $("html, body").animate({
      scrollTop: newScrollTop + ‘px‘
    }, 400, function () {
      isfinish = true
      })
    }
  }
  $(this).on("mousewheel", scrollFunc)
})

调试的时候发现在chrome下,一次滚动会触发多个mousewheel事件。于是利用isfinish控制。

$("html, body").animate()在IE下用html,chrome下用body。还不知道为什么。

然后这个整屏滚动的效果,本来用js写的,但是效果很捉急,然后换了jquery的animation,效果稍微好一点,但是其实还是很捉急,尤其是在IE下面。。

 

整屏滚动