jquery 页面跳转动画效果

jquery 页面跳转动画效果,第1张

HTML结构

页面切换特效的HTML结构使用一个<main>元素来作为页面的包裹元素,div.cd-cover-layer用于制作页面切换时的遮罩层,div.cd-loading-bar是进行ajax加载时的loading进度条。

<main>

<div class="cd-index cd-main-content">

<div>

<h1>Page Transition</h1>

<!-- your content here -->

</div>

</div>

</main>

<div class="cd-cover-layer"></div><!-- this is the cover layer -->

<div class="cd-loading-bar"></div><!-- this is the loading bar -->     

CSS样式

该页面切换特效中使用body::before和body::after伪元素在页面切换过程中创建两个遮罩层来遮住页面内容。它们的定位是固定定位,高度等于50vh,宽度为100%。默认情况下,使用CSS transform属性将它们隐藏起来(translateY(-100%)/translateY(100%))。当用户切换页面的时候,这些元素被移动回视口当中(通过在<body>元素上添加.page-is-changing class)。

下面的图片演示了这个过程:

页面切换特效

body::after, body::before {

/* these are the 2 half blocks which cover the content once the animation is triggered */

height: 50vh

width: 100%

position: fixed

left: 0

}

body::before {

top: 0

transform: translateY(-100%)

}

body::after {

bottom: 0

transform: translateY(100%)

}

body.page-is-changing::after, body.page-is-changing::before {

transform: translateY(0)

}      

页面切换时,页面内容的淡入淡出效果是通过改变div.cd-cover-layer的透明度实现的。它覆盖了.cd-main-content元素,并具有相同的背景色,然后在<body>被添加.page-is-changing class的时候,将透明度从0修改为1。

Loading进度条使用.cd-loading-bar::before伪元素来制作。默认它被缩小(scaleX(0))和transform-origin: left center。当页面切换开始时它被使用scaleX(1)放大会原来的尺寸。

.cd-loading-bar {

/* this is the loading bar - visible while switching from one page to the following one */

position: fixed

height: 2px

width: 90%

}

.cd-loading-bar::before {

/* this is the progress bar inside the loading bar */

position: absolute

left: 0

top: 0

height: 100%

width: 100%

transform: scaleX(0)

transform-origin: left center

}

.page-is-changing .cd-loading-bar::before {

transform: scaleX(1)

}      

特效中平滑的过渡效果使用CSS Transitions来实现。每一个动画元素都被添加了不同的transition-delay,以实现不同的元素动画顺序。

JAVASCRIPT

该页面切换特效中在链接上使用data-type="page-transition"属性,用于触发页面切换事件。当插件检测到用户点击事件,changePage()方法将被执行。

$('main').on('click', '[data-type="page-transition"]', function(event){

event.preventDefault()

//detect which page has been selected

var newPage = $(this).attr('href')

//if the page is not animating - trigger animation

if( !isAnimating ) changePage(newPage, true)

})       

这个方法会触发页面切换动画,并通过loadNewContent()方法加载新内容。

function changePage(url, bool) {

isAnimating = true

// trigger page animation

$('body').addClass('page-is-changing')

//...

loadNewContent(url, bool)

//...

}        

当新的内容被加载后,会替代原来<main>元素中的内容。.page-is-changing class被从body中移除,新加载的内容会被添加到window.history中(使用pushState()方法)。

function loadNewContent(url, bool) {

var newSectionName = 'cd-'+url.replace('.html', ''),

section = $('<div class="cd-main-content '+newSectionName+'"></div>')

section.load(url+' .cd-main-content >*', function(event){

// load new content and replace <main>content with the new one

$('main').html(section)

//...

$('body').removeClass('page-is-changing')

//...

if(url != window.location){

//add the new page to the window.history

window.history.pushState({path: url},'',url)

}

})

}        

为了在用户点击浏览器的回退按钮时触发相同的页面切换动画效果,插件中监听popstate事件,并在它触发时执行changePage()函数。

$(window).on('popstate', function() {

var newPageArray = location.pathname.split('/'),

//this is the url of the page to be loaded

newPage = newPageArray[newPageArray.length - 1]

if( !isAnimating ) changePage(newPage)

})       

可以设置啊,如图:

常见的失败做法

最常见的做法事设置元素的opacity,这种设置出来的效果就是内容与背景都事半透明的,严重影响视觉效果。

还有就是设置background-color:rgba(),这种方式只能设置背景颜色的透明度。

正确Action:

<!DOCTYPE html> <html lang="en"> <head>    <meta charset="UTF-8">    <title>登陆</title>    <style type="text/css">        body{            background-image:url(images/bird.jpg)            background-repeat: no-repeat            background-size:100%        }        .login_box::before{            content:""            /*-webkit-filter: opacity(50%)             filter: opacity(50%)*/            background-image:url(images/love.jpg)            opacity:0.5//透明度设置            z-index:-1            background-size:500px 300px            width:500px            height:300px            position:absolute            //一定要设置position:absolute,这样才能设置z-index,让背景处于内容的下一层            top:0px            left:0px            border-radius:40px        }        .login_box{            position:fixed            left:50%            top:200px            width:500px            height:300px            margin-left:-250px            border-radius:40px            box-shadow: 10px 10px 5px #888            border:1px solid #666             text-align:center        }        form{            display:inline-block            margin-top:100px        }        input{            display:block            width:250px            height:30px            background-color: #888            border:1px solid #fee            outline:none            border-radius:10px        }        input[type="submit"]{            width:100px            height:30x            margin-left: 70px            background-color: #ccc        }        span{            color:red            font-size:15px        }    </style> </head> <body>    <div class="login_box">... ...

该错误是语法错误,意思是printf语句之前的那条语句后面没加分号。

C语言中规定每条语句以分号(;)作为结束标志。如果没加分号,程序在编译的时候就会出错。

举例如下:

#include<stdio.h>

void main()

{

    int a=4   

    printf("%d", a)  

}

以上程序编译的时候就会报错,因为int a=4后面没加分号,就会提示expected''before"printf"的错误。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11910588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存