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)

})

你樱尘好,鼠标滑过图片,图片产生淡入淡出的效果,这个可以用jquery来实现。具体写法是:

$("bnt").mouseover(function(){

    $("img").fadeOut(300,function(){

        $("img").fadeIn(300)

    })

})

这个效果涉及到fadeOut、fadeIn等js元素,建议你百度搜索“赵一并颂茄鸣随笔博客”,在网站的建站视频栏目中有《利用fadeTo改变元素的不透明度代码》的 *** 作视频,很详细。

如果我的回答对绝察你有用,可以采纳哦!

如果是通过鼠标点击事件来触发动画效果

可以使用

$("#button").click(function(){

$("#div").stop().fadeToggle("slow")

})123

$.stop()可以防止点击过快时,元素会呈现与点击次数相关的淡入淡出动画循环

如果是通过鼠标的移入移出来触发动画效果

可以使用

$("#div1").hover(function(){

$("div2").stop().fadeTo("slow",1,function(){

$(this).css("display", "block")

})

},function(){

$("div2").stop().fadeTo("slow",0,function(){

$(this).css("display", none)

})

}

)123456789101112

之所以用hover而不是用mouseout mouseover,因为当时的情况是需要鼠标进入元素时,触发淡入效果,悬停时,一直呈现元素的淡入状态,而从悬停状态转到移出状态时,才执行淡出动画。

而且,如果元素内包含多个子元素,类似于

<div id="div1">

<div id="div2"></div>

<div id="div3"></div>

</div>1234

对于div1绑定mouseout mouseover事件,如果鼠标在div2和div3之间移动时,就会出现多次淡入淡出动画效果

而让烂芦用hover就可以坦带实现我们想要的效果

在执行的回调函数中添加改变元素的样式,是因为,在淡出效果结束后,虽然看不见了,但是元素依旧在那里,此时鼠标移入时,仍然会触发淡入动画,这显历基然也不是我们想要的,所以,在动画结束后,让他none


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

原文地址: https://outofmemory.cn/bake/11981024.html

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

发表评论

登录后才能评论

评论列表(0条)

保存