视差滚动demo (pc)
根据设计图设定每屏的高度,js会自动缩放到全屏尺寸,效果要大尺寸才能看的出来
demo :http://runjs.cn/detail/uvizsekd
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <style>
- html,body{
- margin:0;padding:0;
- }
- .pages{
- width:100%;
- height:100vh;
- outline: 1px solid blue;
- }
- #a,#b,#c{
- width:50%;
- height:200px;
- }
- #a ,#c{
- background:rgba(212,132,11,.5);
- }
- #b{
- background:rgba(22,32,11,.5);
- }
- </style>
- </head>
- <body>
- <div class="pages">
- <div id="a">123</div>
- <div id="c">123</div>
- </div>
- <div class="pages">
- <div id="b">bbb</div>
- </div>
- <div class="pages">
- </div>
- </body>
- </html>
- <script src="https://code.jquery.com/jquery-2.2.4.js" integrity="sha256-iT6Q9iMJYuQiMWNd9lDyBUStIq/8PuOW33aOqmvFpqI=" crossorigin="anonymous"></script>
- <script>
- var design_size = {"width" : 1920 }
- var pages = [
- {
- "height" : 4000 //* radio
- ,"background" : "http://image.tianjimedia.com/uploadImages/2012/221/960UAS60H799.jpg"
- ,"elems" : [
- {"id" : "#a"
- ,"start" : {"left" : 0 , "top" : 0}
- ,"end" : {"left": 200 , "top" : 3600}
- }
- ,{"id" : "#c"
- ,"start" : {"right" : 0 , "bottom" : 4000}
- ,"end" : {"right": 200 , "bottom" : 0}
- }
- ]
- },
- {
- "height" : 3500 //* radio
- ,"background" : "http://image.tianjimedia.com/uploadImages/2012/072/S056Y53BS3Q6_1000x500.jpg"
- ,"elems" : [
- {"id" : "#b"
- ,"start" : {"right" : 0 , "top" : 0}
- ,"end" : {"right": 500 , "top" : 3200}
- }
- ]
- },
- {
- "height" : '3.0' //* radio
- ,"background" : "http://image.tianjimedia.com/uploadImages/2013/065/85GSC473318U.jpg"
- ,"elems" : [
- ]
- },
- ]
- </script>
- <script>
- ~function (pg_conf , pg_doms){
- var window_height = window.innerHeight
- var radio = $(window).width() / design_size.width
- pg_doms = $(pg_doms)
- var h_stack = [0]
- ,_pos = 0
- ,_play = 0
- ,_direct
- var scene , scene_dom , scene_elems
- var animating = false
- scrollTo(document.body , 0 ,100)
- function scrollTo(element, to, duration) {
- animating = true
- if (duration <= 0) return animating = false;
- var difference = to - element.scrollTop;
- var perTick = difference / duration * 10;
- setTimeout(function() {
- element.scrollTop = element.scrollTop + perTick;
- if (element.scrollTop == to) return animating = false;
- scrollTo(element, to, duration - 10);
- }, 10);
- }
- function play(index ,opt){
- if (!pg_conf[index]) {
- return
- }
- opt = opt || {}
- _play = index
- scene = pg_conf[index]
- scene_dom = pg_doms.eq(index)
- scene_elems = scene.elems
- if (0 && opt.movein){
- if ('top' == opt.movein){
- var to = h_stack[_play]
- }else {
- var to = h_stack[_play+1] - window_height
- }
- if (to) scrollTo(document.body , to ,200)
- }
- ///window.scrollTo(0, h_stack[_play])
- /*
- scene_elems.forEach(function(e_conf){
- e_conf.dom.css('position','absolute').css(e_conf.start)
- })
- */
- }
- function roll(s){
- if (!scene) return
- if (s > scene.scrTotal) return
- var process = s / scene.scrTotal
- //console.log(process , s, scene.scrTotal , scene.height , window.innerHeight)
- scene_elems.forEach(function(e_conf){
- var ret = {}
- //console.log(e_conf)
- for (var key in e_conf.end){
- if (key in e_conf.start) {
- var m = (e_conf.end[key] - e_conf.start[key] )*process + e_conf.start[key]
- ret[key] = m
- }
- }
- //console.log(ret)
- e_conf.dom.css(ret)
- })
- }
- var t = 0
- pg_conf.forEach(function(p , i){
- var dom = pg_doms.eq(i)
- if (/^\d*\.\d*$/.test(p.height)){
- var height = p.height * window_height
- }else {
- var height = p.height * radio
- }
- t += height
- h_stack.push(t)
- p.height = height
- p.scrTotal = height - window_height
- dom.css({width:'100%'
- ,height: height
- ,position:'relative'
- ,background: 'url(' + p.background+ ') '
- ,'background-size':'cover'
- ,'background-attachment' : 'fixed'
- })
- p.elems.forEach(function(e_conf){
- e_conf.dom = $(e_conf.id).css('position','absolute').css(e_conf.start)
- for (var key in e_conf.start){
- e_conf.start[key] = e_conf.start[key] * radio
- }
- for (var key in e_conf.end){
- e_conf.end[key] = e_conf.end[key] * radio
- }
- })
- })
- play(_play)
- var _threshold = window_height //- 100
- function move(evt){
- if (animating) return
- var scrl = document.body.scrollTop
- if (scrl > _pos) _direct = 'down'
- else _direct = 'up'
- _pos = scrl
- var boudary = h_stack[_play]
- if ('down' == _direct){
- if (_play !== h_stack.length - 2){
- var bound_next = h_stack[_play + 1]
- if (scrl + _threshold > bound_next) {
- console.log('next')
- play(_play+1 ,{"movein" : "top"})
- }
- }
- }else {
- if (_play !== 0){
- var bound_next = h_stack[_play ]
- if (scrl <= bound_next){
- console.log('pre')
- play(_play-1 ,{"movein" : "bottom"})
- }
- }
- }
- boudary = h_stack[_play]
- roll(scrl - boudary)
- }
- window.addEventListener('scroll' , move)
- }(pages , '.pages')
- </script>
视差滚动demo (pc)的更多相关文章
- 利用background-attachment做视差滚动效果
视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验.作为今年网页设计的热点趋势,越来越多的网站应用了这项技术. 不明白的可以先看 ...
- 分享七款视差滚动效果的jQuery 插件
视差(Parallax)是指从不同的点看一个物体时形成的视觉差异,这个名词是源自希腊文的παράλλαξις (parallaxis),意思是”改变”.在网页设计中,视差滚动(Parallax Scr ...
- 16个最棒的jQuery视差滚动效果教程
今天我们整理了16个最棒的jQuery视差滚动效果教程 , 并附有演示地址,你可以快速的查看教程的效果,或者应用在自己的项目中.希望本文对想要学习或者使用jQuery视差效果的朋友有帮助,慢慢的欣赏吧 ...
- 视差滚动(Parallax Scrolling)效果的原理和实现
视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验.作为今年网页设计的热点趋势,越来越多的网站应用了这项技术. 一.什么是视差滚 ...
- css实现视差滚动效果
今天逛京东金融的时候发现他家网站首页的滚动效果看着很有意思,于是就做了一个,demo链接http://1.liwenyang.applinzi.com/index.html 大多数的视差滚动效果都是使 ...
- 那些H5用到的技术(5)——视差滚动效果
前言原理使用方式结合swiper.js 前言 视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验. 目前最火热的视差开源库为pa ...
- Sequence.js 实现带有视差滚动特效的图片滑块
Sequence.js 功能齐全,除了能实现之前分享过的现代的图片滑动效果,还可以融合当前非常流行的视差滚动(Parallax Scrolling)效果.让多层背景以不同的速度移动,形成立体的运动效果 ...
- swift语言实战晋级-第9章 游戏实战-跑酷熊猫-9-10 移除平台与视差滚动
9.9 移除场景之外的平台 用为平台是源源不断的产生的,如果不注意销毁,平台就将越积越多,虽然在游戏场景中看不到.几十个还看不出问题,那几万个呢?几百万个呢? 所以我们来看看怎么移除平台,那什么样的平 ...
- Swift游戏实战-跑酷熊猫 10 视差滚动背景
原理 实现 勘误 “实现”的视频中有个错误,如下 背景移动时有个错误,看红色部分,近景归位时,第二张图片的下标是1 if arrBG[0].position.x + arrBG[0].frame.wi ...
随机推荐
- Node.js:文件系统
ylbtech-Node.js:文件系统 1.返回顶部 1. Node.js 文件系统 Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API. Node 导入文件系统模块(fs)语 ...
- ES6和Node容易搞混淆的点
ES6 import 模块名 from XX '模块标识符' -----导入模块 import '路径 ' -----导入CSS样式 export default { } 和export ...
- C - Pocket Book(set)
Problem description One day little Vasya found mom's pocket book. The book had n names of her friend ...
- 【转】PowerDesigner物理数据表生成C#实体类Model
model实体类是什么: 在三层架构UI,BLL,DAL中,有时用户插入一条记录到数据库中,必然会有不少数据,按正常编程,也必然会一下子调用某个函数传入不少参数.为了减少参数的数量,达到高效简洁的效果 ...
- Java基础之多线程简述
首先,要辨析进程与线程的概念: 进程是程序执行的过程,它持有资源和线程,相对于程序本身而言具有动态性. 线程是系统中最小的执行单元,同一个进程中可能有多个线程,它们共享该进程持有的资源.线程的通信也称 ...
- 使用Micrisoft.net设计方案 前言
前言 主要阐述23种设计模式在Microsoft.Net中的使用,以及使用设计模式创建后的对象如何使用.同是向我们传达3个理念,分别是: 1. 使用设计模式可以让程序更加灵活 2. 结构越复杂,意 ...
- Promise API 简介
Promise API 简介 译者注: 到处是回调函数,代码非常臃肿难看, Promise 主要用来解决这种编程方式, 将某些代码封装于内部. Promise 直译为"承诺",但一 ...
- LruCache缓存机制
LruCache: Android提供的使用了(Least Recently Used)近期最少使用算法的缓存类 内部基于LinkedHashMap实现 实现这个主要需要重写 构造时需要确定Cache ...
- GCC G++ Make CMake自我科普
Linux下gcc g++ make cmake 联系和区别 C/C++程序从编写到可执行一般经历这几个阶段 编写源代码 编译器编译代码生成目标文件,如.o文件 链接器链接目标文件和其他目标文件/库文 ...
- MySQL 5.6 Reference Manual-14.4 InnoDB Configuration
14.4 InnoDB Configuration 14.4.1 InnoDB Initialization and Startup Configuration 14.4.2 Configuring ...