JavaScript中作用域回顾(避免使用全局变量)(瀑布流的实现)(scroll事件)以及Django自定义模板函数回顾
页面显示照片样式为瀑布流:

上面的div个数可以按照自己安排进行划分。img的分布可以使用模板标签以及自定义模板函数进行排布:
自定义模板函数实现可以看,最后几列:python---django中模板渲染
def img(req):
img = models.Img.objects.all() return render(req,"images.html",{'img':img})
服务端数据分发
from django import template register = template.Library() @register.filter
def formod(count,mod):
return count%mod
自定义模板函数
<div class="w">
<div class="item">
{% for item in img %}
{% if forloop.counter|formod: == %}
<img src="{{ item.src }}" alt="">
{% endif %}
{% endfor %}
</div>
<div class="item">
{% for item in img %}
{% if forloop.counter|formod: == %}
<img src="{{ item.src }}" alt="">
{% endif %}
{% endfor %}
</div>
<div class="item">
{% for item in img %}
{% if forloop.counter|formod: == %}
<img src="{{ item.src }}" alt="">
{% endif %}
{% endfor %}
</div>
<div class="item">
{% for item in img %}
{% if forloop.counter|formod: == %}
<img src="{{ item.src }}" alt="">
{% endif %}
{% endfor %}
</div>
</div>
前端使用模板函数
下面开始回顾JavaScript:JavaScript中函数和类
记住:尽量少使用全局函数,因为项目中可能会在某些你自己都不知道的地方修改了这个变量的原来数据
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.w{
width: 1000px;
margin: auto;
} .item{
width: %;
float: left;
}
{#图片默认大小是按照自己的大小来排序#}
.item img{
width: %;
}
</style>
</head>
<body> <div class="w">
<div class="item"> </div>
<div class="item"> </div>
<div class="item"> </div>
<div class="item"> </div>
</div> </body>
</html>
HTML代码部分
NID = ;
Flag = true;
LastPosition = ; $(function(){
initImg(); $(window).scroll(function(){
var bodyTop = $("body").scrollTop();
var docHg = $(document).height();
var winHg = $(window).height(); var offset = docHg - bodyTop - winHg;
if(offset < ){
NID += ;
if(Flag){
initImg();
}
}
})
}) function initImg(){
$.ajax({
url:'/get_images.html',
type:"GET",
data:{nid:NID},
dataType:"json",
success:function (data) {
if(!data.status){
Flag = false;
return;
}
var img_list = data.data;
$.each(img_list, function (index, v) {
//console.log(i,v) //i索引0开始 v字典(对象)
var mod = (index+LastPosition)%; var img = '<img src="'+v.src+'" alt="'+v.title+'">'
var img = document.createElement('img') //document.createElement("big"); // 通过 DOM 创建新元素
img.src=v.src
img.title=v.title $(".item")[mod].appendChild(img)
console.log(mod)
if(index+ == img_list.length){
NID = v.id;
LastPosition = mod + ;
}
});
}
})
}
js使用ajax获取数据(使用了全局变量)
下面是使用类,将数据和函数进行封装,来避免全局变量干扰:
<script src="/static/jquery.js"></script>
<script> //封装为类,防止全局变量出现
function ScrollImg(){
this.NID = ;
this.LastPosition = ;
this.Flag = true;
this.initImg = function(){
// this = obj
var that = this; $.ajax({
url:'/get_images.html',
type:"GET",
data:{nid:that.NID},
dataType:"json",
//这里面还有一个函数属于ajax对象,所以若是在这里面出现this,则不会是外面的obj对象,所以下面的数据NID,LastPosition,Flag不是上面的对象数据
//要想调用obj对象数据,我们需要传递这个对象,而且为了避免this冲突,我们可以将obj对象赋值给一个变量(例如:that),则在ajax中就可以进行使用了(传递给ajax,ajax对象本身没有这个数据就会往上层作用域去取数据)
success:function (data) {
if(!data.status){
that.Flag = false;
return;
}
var img_list = data.data;
$.each(img_list, function (index, v) {
//console.log(i,v) //i索引0开始 v字典(对象)
var mod = (index+that.LastPosition)%; var img = '<img src="'+v.src+'" alt="'+v.title+'">'
var img = document.createElement('img') //document.createElement("big"); // 通过 DOM 创建新元素
img.src=v.src
img.title=v.title $(".item")[mod].appendChild(img)
console.log(mod)
if(index+ == img_list.length){
that.NID = v.id;
that.LastPosition = mod + ;
}
});
}
})
}; this.scrollEvent = function(){
//this = obj
var that = this; $(window).scroll(function(){ //又是一个函数,这个函数的调用者也不是我们,所以我们不能单纯使用this
var bodyTop = $("body").scrollTop();
var docHg = $(document).height();
var winHg = $(window).height(); var offset = docHg - bodyTop - winHg;
if(offset < ){
that.NID += ;
if(that.Flag){
that.initImg();
}
}
})
}
} //不含全局变量 此处进行调用该对象
$(function(){
var obj = new ScrollImg();
obj.initImg();
obj.scrollEvent();
}) </script>
补充:scroll事件:
#var winTop = $("body").scrollTop(); $(window).scrollTop(); $(document).scrollTop(); 当前页面上界偏移量
#var docHg=$(document).height(); 当前文档的高度
#var winHg=$(window).height(); 当前浏览器窗口高度(客户区)
#var off=$(this).offset().top; 某个元素的上界偏移量
#var hgt=$(this).height(); 某个元素高度
#其中特别注意$("body").height();和$(document).height();
#两个并不是一致的,因为body中有些元素的位置可能是相对位置,导致body的高度并不是准确的高度
#所以要获取整个文档高度,需要使用$(document).height();
JavaScript中作用域回顾(避免使用全局变量)(瀑布流的实现)(scroll事件)以及Django自定义模板函数回顾的更多相关文章
- 从零开始讲解JavaScript中作用域链的概念及用途
从零开始讲解JavaScript中作用域链的概念及用途 引言 正文 一.执行环境 二.作用域链 三.块级作用域 四.其他情况 五.总结 结束语 引言 先点赞,再看博客,顺手可以点个关注. 微信公众号搜 ...
- JavaScript中作用域和作用域链的简单理解(变量提升)
通过阅读<JS高级程序设计>这本书,对js中的作用域和作用域链知识有了初步的了解和认识,准备成笔记供大家参考,笔记中字数比较多,但个人认为叙述的挺详细的,所以希望读者耐心看.再者,本人了解 ...
- js中masonry与infinitescroll结合 形成瀑布流
后台:(有点问题 page应该从1开始 而不是从0开始) public function actionExperts() { $top=5; $page=em ...
- 在javascript中的浏览器兼容问题以及兼容浏览器汇总(默认事件,阻止冒泡,事件监听。。。)以及解决方式详解
在javascript中常见的浏览器兼容问题,以及解决方式. 在前端工作当中我们遵循这样的原则:渐进增强和优雅降级 渐进增强(progressive enhancement): 针对低版本浏览器进 ...
- python---django中模板渲染(csrf令牌使用,自定义模板函数)
使用终端,可以更方便的去实验,但是没有提示信息: 在项目目录下: D:\MyPython\day23\HelloWorld>python manage.py shell 开始实验: >&g ...
- JavaScript中---作用域
作用域: 变量还有函数作用的范围. 浏览器的内核主要有两大功能,一个是渲染页面,另一个就是我们的JavaScript的解释器了. 我们主要来说说JavaScript解释器,在解析时是怎么样的工作原理. ...
- JavaScript中作用域和作用域链解析
学习js,肯定要学习作用域,js作用域和其他的主流语言的作用域还存在很大的区别. 一.js没有块级作用域. js没有块级作用域,就像这样: if(){ : console.log(a) //输出100 ...
- 理解JavaScript中作用域链的关系
javascript里的关系又多又乱.作用域链是一种单向的链式关系,还算简单清晰:this机制的调用关系,稍微有些复杂:而关于原型,则是prototype.proto和constructor的三角关系 ...
- javascript中作用域
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- 【转】Spring Boot干货系列:(一)优雅的入门篇
转自Spring Boot干货系列:(一)优雅的入门篇 前言 Spring一直是很火的一个开源框架,在过去的一段时间里,Spring Boot在社区中热度一直很高,所以决定花时间来了解和学习,为自己做 ...
- Siki_Unity_2-9_C#高级教程(未完)
Unity 2-9 C#高级教程 任务1:字符串和正则表达式任务1-1&1-2:字符串类string System.String类(string为别名) 注:string创建的字符串是不可变的 ...
- Spark RDD深度解析-RDD计算流程
Spark RDD深度解析-RDD计算流程 摘要 RDD(Resilient Distributed Datasets)是Spark的核心数据结构,所有数据计算操作均基于该结构进行,包括Spark ...
- error: Build input file cannot be found: '*******/node_modules/react-native/Libraries/WebSocket/libfishhook.a' 问题解决记录
解决了刚才的'config.h' file not found问题,本以为就可以顺畅的跑起来,谁知道又被恶心到了,Build input file cannot be found!!! 问题: err ...
- 数据库——SQL数据连接查询
连接查询 查询结果或条件涉及多个表的查询称为连接查询SQL中连接查询的主要类型 广义笛卡尔积 等值连接(含自然连接) 自身连接查询 外连接查询 一.广义笛卡尔积 不带连 ...
- Alpha Version Release Of Teamwork: Appendix 1 BUG BASH
在为期一周的发布周中,我们将app本身最后的细节完善,功能代码到位,UI不断改进和优化,团队在开始准备发布之前,对整个APP进行了一次BUG检查,每个人都部署了app在自己的android设备上进行测 ...
- 团队工作总结及自评 & 补上来的用户调研
http://www.cnblogs.com/case1/ 让同学代发了,辛苦点跳转一下~
- 软件工程学习之小学四则混合运算出题软件 Version 1.1 设计思路及感想
继上次采用形式文法来生成混合运算的算式,由于算法中没有引入控制参数而导致容易产生形式累赘(多余的括号等)的算式.本次更新决定采用一种更为简单有效的生成方式,由给出的一个随机的最终答案S,通过给定的一个 ...
- ElasticSearch 2 (38) - 信息聚合系列之结束与思考
ElasticSearch 2 (38) - 信息聚合系列之结束与思考 摘要 版本 elasticsearch版本: elasticsearch-2.x 内容 本小节涵盖了许多基本理论以及很多深入的技 ...
- php 中的 “!=”和“!==”
!==是指绝对不等于,比如,$a = 2, $b=”2″ 那么,$a!==$b成立,可是$a!=$b不成立: