emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题
想要更详细了解pjax,需要查看官网
或者看本站文章:jQuery.pjax.js:使用AJAX和pushState无刷新加载网页(官网教程中文翻译)
效果看本站,音乐无刷新播放,代码高亮和复制js加载成功~
准备文件
编辑模板 header.php 的 head 添加必要文件:
jquery-1.11.1.min.js:百度网盘下载
jquery.pjax-1.8.2.min.js:百度网盘下载
下载到模板的 scripts 目录下后将下面两句添加到</head>所有script标签的最前面:
点击预览
<script type="text/javascript" src="<?php echo TEMPLATE_URL; ?>scripts/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="<?php echo TEMPLATE_URL; ?>scripts/jquery.pjax-1.8.2.min.js"></script>
注意:jQuery需要1.7.0版本以上的才有pushState的封装
使用pjax
编辑模版 footer.php 在/body标记结束前插入:
< script type="text/javascript">
$(document).pjax('a[target!=_blank]', '#contentleft', {fragment: '#contentleft',timeout: 8000});
< /script>
参数解释:
a[target!=_blank]:绑定本页面非新窗口打开的所有链接
#contentleft:链接点击之后,仅仅更新#contentleft容器的内容,页面其他内容不变,需自行修改这个参数
fragment:'#contentleft':#contentleft选择器的碎片从Ajax响应提取
timeout:8000:Ajax超时时间为8秒,如果未响应则直接刷新网页
注意:这个 #contentleft 怎么找呢?
小指的方法是打开模板的 echo_log.php,找到包裹文章页面的 div 的 id 就是了,一般是第一第二个
id 名字都是 contentleft,content或者main之类的,按照这个方法一般都可以了,如果不行回我吧~
解决pjax的缓冲--加入等待动画
编辑模板 footer.php 在/body标记前插入下面代码
点击预览
<div class="qingzz_pjax_loading">
<div class="qingzz_pjax_spinner">
<div class="qingzz_pjax_rect1"></div>
<div class="qingzz_pjax_rect2"></div>
<div class="qingzz_pjax_rect3"></div>
<div class="qingzz_pjax_rect4"></div>
<div class="qingzz_pjax_rect5"></div>
</div>
</div>
<script>
$(document).on('pjax:send', function() { //pjax链接点击后显示加载动画;
$(".qingzz_pjax_loading").css("display", "block");
});
$(document).on('pjax:complete', function() { //pjax链接加载完成后隐藏加载动画;
$(".qingzz_pjax_loading").css("display", "none");
});
</script>
没有用音乐插件的需要在模板css文件末尾添加css:
.qingzz_pjax_loading {
height: 100%;
width: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 1000;
background-color: rgba(90,90,90,.5);
display: none;
}
.qingzz_pjax_spinner {
margin: 300px auto;
width: 50px;
height: 60px;
text-align: center;
font-size: 10px;
}
.qingzz_pjax_spinner > div {
background-color: #67CF22;
height: 100%;
width: 6px;
display: inline-block;
-webkit-animation: stretchdelay 1.2s infinite ease-in-out;
animation: stretchdelay 1.2s infinite ease-in-out;
}
.qingzz_pjax_spinner .qingzz_pjax_rect2 {
-webkit-animation-delay: -1.1s;
animation-delay: -1.1s;
}
.qingzz_pjax_spinner .qingzz_pjax_rect3 {
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
}
.qingzz_pjax_spinner .qingzz_pjax_rect4 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
.qingzz_pjax_spinner .qingzz_pjax_rect5 {
-webkit-animation-delay: -0.8s;
animation-delay: -0.8s;
}
@-webkit-keyframes stretchdelay {
0%, 40%, 100% { -webkit-transform: scaleY(0.4) }
20% { -webkit-transform: scaleY(1.0) }
}
@keyframes stretchdelay {
0%, 40%, 100% {
transform: scaleY(0.4);
-webkit-transform: scaleY(0.4);
} 20% {
transform: scaleY(1.0);
-webkit-transform: scaleY(1.0);
}
}
刷新一下,挺酷的吧~
解决无法提交和多说不加载问题:
编辑模板的 footer.php,在/body标签前添加下面这段代码:
点击预览
<script>
$(document).on('submit', 'form', function(event) {// 解决提交失效问题
$.pjax.submit(event, '#contentleft', {fragment: '#contentleft',timeout: 8000});
});
$(document).on('pjax:complete', function() {
pajx_loadDuodsuo();//pjax加载完成之后调用重载多说函数
});
function pajx_loadDuodsuo(){
var dus=$(".ds-thread");
if($(dus).length==1){
var el = document.createElement('div');
el.setAttribute('data-thread-key',$(dus).attr("data-thread-key"));//必选参数
el.setAttribute('data-url',$(dus).attr("data-url"));
DUOSHUO.EmbedThread(el);
$(dus).html(el);
}
}
</script>
里面的#contentleft一样需要改成前面的容器id哦~
总结footer.php需要添加的代码:
点击预览
<div class="qingzz_pjax_loading">
<div class="qingzz_pjax_spinner">
<div class="qingzz_pjax_rect1"></div>
<div class="qingzz_pjax_rect2"></div>
<div class="qingzz_pjax_rect3"></div>
<div class="qingzz_pjax_rect4"></div>
<div class="qingzz_pjax_rect5"></div>
</div>
</div>
<script>
// 绑定链接和容器
$(document).pjax('a[target!=_blank]', '#contentleft', {fragment: '#contentleft',timeout: 8000});
$(document).on('submit', 'form', function(event) {// 解决提交失效问题
$.pjax.submit(event, '#contentleft', {fragment: '#contentleft',timeout: 8000});
});
$(document).on('pjax:send', function() { //pjax链接点击后显示加载动画;
$(".qingzz_pjax_loading").css("display", "block");
});
$(document).on('pjax:complete', function() { //pjax链接加载完成后隐藏加载动画;
$(".qingzz_pjax_loading").css("display", "none");
pajx_loadDuodsuo();//pjax加载完成之后调用重载多说函数
});
function pajx_loadDuodsuo(){
var dus=$(".ds-thread");
if($(dus).length==1){
var el = document.createElement('div');
el.setAttribute('data-thread-key',$(dus).attr("data-thread-key"));//必选参数
el.setAttribute('data-url',$(dus).attr("data-url"));
DUOSHUO.EmbedThread(el);
$(dus).html(el);
}
}
</script>
解决容器中javascript事件失效的问题:重点
问题:pjax之后多说评论框不加载,ajax评论不能提交等等问题。
问题原因:原先容器绑定的事件被新容器替换掉了,新容器的div没有绑定事件,所以点击无效。
解决方法一:利用pjax的加载完成回调函数,重新绑定事件。
解决方法二:将javascript添加到 echo_log.php 的容器,一般加到容器末尾,即/div标签上面。
更准确的方法查看本站文章:
将javascript添加到 echo_log.php 的容器
原理是容器里面的内容是会刷新重新加载的,所以把javascript放在这里会重新加载~
这里只列出常用的,其他具体的自行摸索添加吧~
最好放到容器末尾/div前面哦~
解决代码高亮问题添加:
<script src="<?php echo BLOG_URL; ?>admin/editor/plugins/code/prettify.js" data-no-instant></script>
<script>prettyPrint();</script>
解决CNZZ统计问题,前面是解释具体方法在最后:
解决百度统计问题:
好啦,完美解决了吧,哈哈哈^_^
emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题的更多相关文章
- jQuery Pjax – 页面无刷新加载,优化用户体验
pjax 是 HTML5 pushState 以及 Ajax 两项技术的简称,综合这两个技术可以实现在不刷新页面的情况下载入 HTML 到当前网页,带给你超快速的浏览器体验,而且有固定链接.标题以及后 ...
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
js中对arry数组的各种操作小结 最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...
- 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据
瀑布流加载显示数据,在当下已经用的很普遍,尤其是我们在做网上商城时,在产品列表页面已经被普遍使用. 对于实现瀑布流布局的解决方案主要有以下两种方式: 1.对每一条显示数据使用绝对定位+浮动的方式,这样 ...
- jquery完成界面无刷新加载登陆注册
昨天公司说官网的登陆注册每次要跳转到另一个界面,能不能做一个简单的,在界面弹出一个框框登陆,我想了想做了这么一个案例,大家来看看成不成 贴上代码,实现了在同一个弹出窗上加载了登陆注册功能!可自由点击! ...
- asp.net mvc 无刷新加载
1.视图(index) <!--start--> <div data-am-widget="list_news" class="am-list-news ...
- ajax实现下拉菜单无刷新加载更多
$(function() { var page = 1; var discount = $('#discount'); var innerHeight = window.innerHeight; va ...
- pushState与ajax实现无刷新加载
一.JS代码: $(document).ready(function() { getContent();//初始化页面 $("nav a").click(function() { ...
- jquery+ajax无刷新加载数据,新闻浏览更多
<script type="text/javascript"> $(document).ready(function (){ $(window).scroll(fu ...
- thinkphp5.0调用ajax无刷新加载数据
控制器层那边就是调数据返回,这里不再赘述,视图层页面ajax部分写法如下 function shanchu(obj) { var code = $(obj).attr("code" ...
随机推荐
- 【codeforces 508C】Anya and Ghosts
[题目链接]:http://codeforces.com/contest/508/problem/C [题意] 每秒钟可以点一根蜡烛; 这根蜡烛会燃烧t秒; 然后会有m只鬼来拜访你; 要求在鬼来拜访你 ...
- Android学习总结(5)——9个非常有用的Andorid 程序片段
一,获取系统版本号: PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0); int ...
- F - Many Moves
F - Many Moves Time limit : 2sec / Memory limit : 256MB Score : 900 points Problem Statement There a ...
- 车展(vijos P1459)
描述 遥控车是在是太漂亮了,韵韵的好朋友都想来参观,所以游乐园决定举办m次车展.车库里共有n辆车,从左到右依次编号为1,2,…,n,每辆车都有一个展台.刚开始每个展台都有一个唯一的高度h[i].主管已 ...
- CODEVS2144 砝码称重2 (哈希表)
由于m很大,所以不能使用DP. 注意到n≤30,直接暴力2^n会TLE. 所以,将砝码平均分成两份,对一份进行一次暴力,用哈希表存下可能的结果. 对下一份再进行一次暴力,在哈希表中搜索剩余的砝码重量是 ...
- hdu_2925_Musical Chairs_201311121643
Musical Chairs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- IOS的一个关于球碰撞的小游戏
这个游戏是关于一个球随机在屏幕上移动,能够用手指来操纵令一个球,假设两个球碰撞到一起,就表示输了,很easy的一个游戏 在StoryBoard里定义两个UIImageView和一个startbutto ...
- 用sp_executesql执行动态SQL语句及获得返回值
过去我执行拼凑出来的动态SQL语句,都直接使用EXEC @sql 的方式.有好几次,都看到有资料说,应该尽量使用 sp_executesql. 究其原因,是因为仅仅参数不同的情况下,sp_execut ...
- bzoj4950: [Wf2017]Mission Improbable
跟着靖靖做题%%%%% 这题一看就觉得和之前的某场模拟赛的一道题很像,找假如某行某列的最大值一样的就可以只堆一个,跑匈牙利就行 一开始以为箱子不能移动-_-! 然后有个坑,大家都知道当这个位置有箱子就 ...
- Makefile 文件怎么写
跟我一起写Makefile:MakeFile介绍 Makefile 使用总结 1. make 命令与 Makefile 文件 在 Linux 平台,执行 make 命令时,会在当前目录下寻找 Make ...