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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)