在开发过程中,为了避免每个页面要做头部底部,就想怎么实现页面无刷新,局部实现效果更换方案

第一联想到了ajax读取页面没然后页面局部替换,在页面上准备几个div。这里就简单粗暴的分成3个部分,(直接贴代码)

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>无刷新方案 一</title><link rel="stylesheet" href="http://css.baojia.com/s4/c/css/reset.css"><style type="text/css">body{width: 80%;margin: 0 auto}ul { margin: 0 auto; overflow: none}/*ul li {float: left; background: #ccc;padding: 15px 20px;}*/ul li {display: inline-table; background: #ccc;padding: 15px 20px;  }ul li:nth-of-type(1){ margin-left: 0px }/*ul li {display: inline-table; background: #ccc;padding: 15px 20px;}*/ul li a{color: #f0f0f0;}#pageHeader{background-color: green}#pageMain{width: 900px; margin: 0 auto; margin-top: 200px}#pageFooter{background-color: red}</style>
</head><body><div id="pageHeader"></div><div id="pageMain"></div><div id="pageFooter"></div>
</body>
<script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
<script src="../js/core.pss.js" type="text/javascript"></script>
<script type="text/javascript">
</script>
</html>

View Code

准备一个简单的头部(“#pageHeader”)代码,直接几个跳转就可以。保留了a标签,是为了交给后端程序员可以直接用。

<ul>
<li><a href="page1.htm">页面1</a></li>
<li><a href="page2.htm">页面2</a></li>
<li><a href="page3.htm">页面3</a></li>
<li><a href="page4.htm">页面4</a></li>
<li><a href="page5.htm">页面5</a></li>
<li><a href="page6.htm">页面6</a></li>
</ul>

View Code

其实上面保留了a标签带来了更多的代码量,但是为了让我们的输出高质量,就辛苦一下自己。这时候增加的代码量是  拦截页面的a标签跳转功能。  几行代码就搞定,这样不影响phpcoder开发

obj.find('a[href!="#"]').bind("click", function(e) {e.preventDefault();loadUrl($.mainContent,$(e.currentTarget).attr("href"),true,true);return false;});obj.find('a[href="#"]').bind("click", function(e) {e.preventDefault();return false;});

View Code

拦截url hash并实现页面分发,主要的js

/****** @liubaing */$.defaultPage = "page1.htm";
$.subPagesDirectory = "";
$.headUrl = "public/header.htm";
$.footUrl = "public/footer.htm";
$.page404 = "error/index.htm";
$.headContent = $("#pageHeader");
$.mainContent = $("#pageMain");
$.footContent = $("#pageFooter");/** delete  A gourl **/
function removeA(cname) {if (cname == undefined || cname == "") return;var obj = (typeof cname == "object") ? cname : $("." + cname);obj.find('a[href!="#"]').bind("click", function(e) {e.preventDefault();loadUrl($.mainContent,$(e.currentTarget).attr("href"),true,true);return false;});obj.find('a[href="#"]').bind("click", function(e) {e.preventDefault();return false;});
}function loadUrl(obj,gourl,ishash,isactive) { if (!gourl || gourl == "" || gourl == null) {alert("跳转页面详细");return;} if(isactive){$(".navbar li").removeClass("active");$('.navbar li:has(a[href="' + gourl + '"])').addClass("active");}$.ajax({isLocal:true,type: "GET",url: gourl,dataType: "html",cache: !1,async: !1,beforeSend: function() {},success: function(data) {obj.html(data);if(ishash) window.location.hash = gourl;removeA(obj);return false;},error: function() {alert("页面" + $.subPagesDirectory + gourl + "还未实现!");return false;}})
}/** delete  A gourl **/
function removefA(cname) {if (cname == undefined || cname == "") return;var obj = (typeof cname == "object") ? cname : $("." + cname);obj.find('a[href!="#"]').bind("click", function(e) {e.preventDefault();loadfile($.mainContent, $(e.currentTarget).attr("href"),true,true);      return false;});obj.find('a[href="#"]').bind("click", function(e) {e.preventDefault();return false;});
}function loadfile(obj,path,ishash,isactive) { $.ajax({type: "GET",url:filepath+path,dataType: "html",cache: !1,async: !1,beforeSend: function() {},success: function(data) {obj.html(data);if(ishash) window.location.hash = path;removefA(obj);return false;},error: function() {}})
}var filepath =""
$(document).ready(function(e) {console.log(location.protocol)if (location.protocol != "file:") {var url = location.hash.replace(/^#/, "");url = (url != "" && url.length > 2 ? url : $.defaultPage);loadUrl($.headContent,$.headUrl,false,false);loadUrl($.mainContent,url,true,true); loadUrl($.footContent,$.footUrl,false,false);}else{filepath =location.href.substring(0, location.href.lastIndexOf("/")+1)loadfile($.headContent,$.headUrl,false,false);loadfile($.mainContent,$.defaultPage,true,true); loadfile($.footContent,$.footUrl,false,false);}
});

View Code

再加上几个测试页面

测试页面1

 <div>我是测试面试页面1</div>

View Code

测试页面2 page2.htm,里面加了一个跳转,因为我们已经拦截a标签的跳转,所以我们也能实现hash跳转

<a href="page1.htm">跳转到第一页</a>
<div class="">测试页面 二 :测试页面引用css   应该有效</div>
<div class="test3">我是页面2样式3</div>

View Code

测试页面3  page3.htm   page3.css   引入了一个外链css文件,这里要重点说明一下。我们在这里引入了css3,页面顺利加载了page3.css文件,page3.htm 的样式得以改变,

紧接着我们再回到page2.htm.但是刚才的page3.css的样式没影响到page2.htm。这里是个要注意的问题了,说明样式文件是会被自动移除的,这和页面的样式表重新渲染相符。

<link rel="stylesheet" href="../css/page3.css">
<div class="">测试页面 三 :测试外链页面引用css   应该有效</div>
<div class="test3">我就是test外链css</div>

View Code

.test3{display: block; width: 170px;height: 200px;background-color: #fb9876}

测试页面4  page4.htm。   这里直接进来可以顺利触发fun4的方法

    <script type="text/javascript">function fun4 (argument) {// body...
        console.log("this method come from page 4")}</script><div class="">测试页面四 :测试页面引用JS  应该有效</div>

View Code

测试页面5  page5.htm      这里可以顺利执行document.body.onload方法    且执行本页的 $(function(){})方法体

<script type="text/javascript">$(function(){console.log("this is test 5")})
</script><div class="">测试页面五 :测试内页引用JS ($(function(){})) 应该有效</div>

View Code

测试页面6   page6.htm   page6.js

<script src="../js/page6.js" type="text/javascript"></script>
<div class="">测试页面六 :测试外链引用 应该有效</div>
<script type="text/javascript">
fun4();
fun6();
</script>

View Code

function fun6(){alert("this is from 666666666666666")
}

View Code

最后你会发现,文件不管是外链js   还是内页js,  都会被存放在 index.htm。这可能会带来一些不好跟踪的问题

在做这个时候的时候可以脑补一下 htm页面渲染过程css和js的加载流程。

也顺便发现了一下其他该注意的问题

1、inline-table   inline-block   4px间距问题

2、ajax读取本地文件设置问题

转载于:https://www.cnblogs.com/liubl/p/5291687.html

前端 页面无刷新方案一相关推荐

  1. 基于jQuery的ajax系列之用FormData实现页面无刷新上传

    接着上一篇ajax系列之用jQuery的ajax方法向服务器发出get和post请求写,这篇主要写如何利用ajax和FormData实现页面无刷新的文件上传效果,主要用到了jQuery的ajax()方 ...

  2. 社区网站功能实现系列(三):社区页面无刷新回发的一种实现方式

    页面无刷新回发实现有很多种方式,可以用XMLHttpRequest,一些js框架的ajax实现(如jQuery的 ajax),ajaxPro,MS的UpdatePanel,web服务等.下面我来介绍另 ...

  3. php无刷新实现页面更新,使用laravel和ajax实现整个页面无刷新的操作方法

    1.数据库文件 CREATE TABLE IF NOT EXISTS mr_key ( id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT ' ...

  4. Sring3MVC页面无刷新上传文件

    Sring3MVC页面无刷新上传文件 首先,这个框架是利用Ajax与Ctroller进行表单提交和数据交互的,但是Ajax是无法支持File上传的,所以在这里我使用了隐藏的Iframe来做文件上传的数 ...

  5. ajax 页面无刷新,Ajax的页面无刷新实现详解(附代码)

    这次给大家带来Ajax的页面无刷新实现详解(附代码),Ajax页面无刷新实现的注意事项有哪些,下面就是实战案例,一起来看一下. ajax (ajax开发) AJAX即"Asynchronou ...

  6. html网页无刷新数据更新,使用javascript怎么实现页面无刷新更新数据

    使用javascript怎么实现页面无刷新更新数据 发布时间:2021-03-18 17:22:21 来源:亿速云 阅读:71 作者:Leah 这篇文章给大家介绍使用javascript怎么实现页面无 ...

  7. 【前端页面缓存技术方案】

    前端页面缓存技术方案 关于页面缓存数据的纯前端技术方案 背景 项目存在的现有方案 思考

  8. html 无刷新显示公告,用javascript实现页面无刷新更新数据_js

    程序设计中会经常碰到一种情况,就是事先无法得知用户会需要哪些数据,必须根据用户选择后再从服务器重新提取数据后反馈给用户.比如一简单的情况,用户选择省份以后,我们立即会在市里边将这个省的所有市重新显示出 ...

  9. 前端页面生成pdf方案

    前端页面生成pdf方案 使用jsPDF的html方法生成 直接将html节点传入jsPDF生成pdf,效果一般 const pdf = new jsPDF('p', 'pt', 'a4'); cons ...

最新文章

  1. 【原创】MySQL 5.5 新增SIGNAL异常处理
  2. 实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法
  3. Google common_schema 2.2 documentation
  4. 简陋版C语言仿真通讯录
  5. python中把输出结果写到一个文件中_Python3.6笔记之将程序运行结果输出到文件的方法...
  6. Delphi查询Sqlserver数据库传入日期类型方法总结
  7. linux的常用的软件,Linux常用的软件和命令
  8. 开启服务器时启动线程
  9. 软件工程java向量相似度计算_向量的相似度计算常用方法9个
  10. 弹性升级诀窍分享:让双11来的更猛烈些吧
  11. gatk过滤_快速入门GATK | Public Library of Bioinformatics
  12. [牛客网]万万没想到之抓捕孔连顺
  13. 995.K连续位的最小翻转次数(唯唯诺诺)
  14. MacBook Pro 触控栏不能正常使用怎么解决
  15. 如何修改MySQL监听IP地址
  16. Mybase7延长试用期
  17. 2021上海高考小三门成绩查询,2021上海高考等级考分数怎么划分等级的
  18. 【成长访谈】李钊:学技术于无形,论大道于无声
  19. 2022年,开源社最亮的星
  20. comsol计算机模拟过程,借助数值模拟分析多孔结构

热门文章

  1. eclipse怎么配置python解释器,在Eclipse中配置Pydev Interpreter以使用Enthought Python分发...
  2. yii和mysql apache_配置Apache,php5,mysql ,以及配置yii框架的简介
  3. jsp input maxlength无效_出现这3个现象, 说明你的孩子在无效学习! 家长们: 原来如此...
  4. 如何根据原理图画封装_如何在短时间内,吃透三极管工作原理,开关导通和封装外形知识点?...
  5. comsol分析时总位移代表什么_基于COMSOL的气动软体执行器仿真
  6. VB讲课笔记10:菜单与对话框
  7. 无心剑中译罗素《通往幸福之路》
  8. C ++基础 | sizeof函数(endl 和 \ n),定义常量(Define Constants),枚举常量(Enumerated Constants)_2
  9. 频率副词always,usually,often...用法_16
  10. python自动复制,Python数组自动相互复制