建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

当前位置: 建站学 > 网页设计 > css教程 >

网页滑动切换特效:采用AJAX刷新和CSS切换

时间:2012-05-01 14:25来源: 作者: 点击:
我做了一个关于网页滑动切换的小例子。这个确实很简单,只要你会使用jQuery、jQuery Mobile、zepto或者其他一些框架,然后他们会给你处理好这个。我不想这么做,我想挑战一下不使用任何框架就可以实现这个效果。HTML代码是越简单越好。 我谷歌搜索了下相关的资料,没有找到

我做了一个关于网页滑动切换的小例子。这个确实很简单,只要你会使用jQuery、jQuery Mobile、zepto或者其他一些框架,然后他们会给你处理好这个。我不想这么做,我想挑战一下不使用任何框架就可以实现这个效果。HTML代码是越简单越好。

我谷歌搜索了下相关的资料,没有找到什么好的解决办法,所以我打算自己写。

我想出的解决办法其实很简单,采用AJAX刷新、CSS切换。这里还需要注意的是,只有在WebKit浏览器上能看到效果。(我个人用PhoneGap做了一个测试应用,可以在Android和IOS系统上运行,所以我只需要WebKit的兼容性。)

首先,我们来看看对body标签的css样式,我让它有动画效果:

1 body{
2 position: relative;
3 -webkit-transition: left .2s ease;
4 }

接下来,我做的是给超链接添加点击事件,让它产生切换效果。这我从一篇很棒的文章中学到的一些方法,来处理这些没有jQuery时的操作,那篇文章叫从jQuery到JavaScript

01 document.addEventListener('DOMContentLoaded', function() {
02 replaceLinks();
03 });
04  
05 function replaceLinks(){
06 var links = document.querySelectorAll('a');
07  
08 for (i=0; i<links.length; i++){
09 var link = links[i];
10 link.addEventListener("click",replacePage, false);
11 }
12  
13 }

下一步是使用AJAX获取到链接页面。

1 event.preventDefault();
2 var href= this.href;
3  
4 var ajax = new XMLHttpRequest();
5 ajax.open("GET",href,true);
6 ajax.send();

现在来看看要达到切换效果,还需要哪些步骤:

1. 滑动当前页面到屏幕左侧;

2. 瞬间移动当前页面到屏幕右侧;

3. 替换body里面的内容;

4. 从屏幕右侧滑入当前页面对。

你必须要遵循上面的步骤,不然不能达到预期的效果;现在我来告诉我是怎么做的:

我移动body到屏幕的左侧

1 body.style.left = "-100%";

这里我写了个移动监听事件

1 body.addEventListener( 'webkitTransitionEnd', moveToRight, false);
2  
3 function moveToRight(event){
4 var body = document.querySelector('body');
5 body.removeEventListener( 'webkitTransitionEnd', moveToRight, false);
6 body.addEventListener( 'webkitTransitionEnd', returnToCenter, false);
7 body.style.opacity = 0;
8 body.style.left = "100%"
9 }

接下来,我替换body的内容,让它再次可见,调整浏览记录,并将它带回屏幕中心。

1 function returnToCenter(event){
2 var body = document.querySelector('body');
3 body.removeEventListener( 'webkitTransitionEnd', returnToCenter, false);
4 body.innerHTML = bodyContent;
5 history.pushState(null, null, href);
6 body.style.opacity = 1;
7 body.style.left = 0;
8 replaceLinks();
9 }

切换过程中,用户可能会点击后退按钮,我们还需对此进行处理:

01 window.addEventListener("popstate", handleBackButton);
02  
03 function handleBackButton(e) {
04  
05 var ajaxBack = new XMLHttpRequest();
06 ajaxBack.open("GET",location.pathname,true);
07 ajaxBack.send();
08  
09 ajaxBack.onreadystatechange=function(){
10 var bodyBack = document.querySelector('body');
11 var bodyBackContent = grabBody(ajaxBack.responseText, "body");
12 bodyBack.addEventListener( 'webkitTransitionEnd', moveToLeft, false);
13 bodyBack.style.left = "100%";
14  
15 function backToCenter(event){
16 var body = document.querySelector('body');
17 body.removeEventListener( 'webkitTransitionEnd', backToCenter, false);
18 body.innerHTML = bodyBackContent;
19 body.style.opacity = 1;
20 body.style.left = 0;
21 replaceLinks();
22 }
23  
24 function moveToLeft(event){
25 var body = document.querySelector('body');
26 body.removeEventListener( 'webkitTransitionEnd', moveToLeft, false);
27 body.addEventListener( 'webkitTransitionEnd', backToCenter, false);
28 body.style.opacity = 0;
29 body.style.left = "-100%"
30 }
31 }
32 }

有人会问,这是一个最好的方法么?我也不知道,但是它确实管用,而且通过谷歌我没有找到更好的解决方案。

这里提供有一个演示地址。(只WebKit浏览器有效)

你也可以通过github获取完整的源代码。

 

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片