照片瀑布流排版

一.利用filter 标签(简单,但影响运行)

  • html 分析

image.png

整个页面分为行,且每行想紧凑,当每列和每行之间没有空隙,就说明整个页面的布局是一个大的div嵌套了四个小的div,布局的页面代码展示
①最外层div设置指定宽度
②将内层的div宽度设好平均值,设置他们的float属性
③设置照片的百分比宽度

{% load fittlertag %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .outter{
            width: 100%;
            margin: 0;
        }
        .item{
            width: 25%;
            float: left;
        }
        .item img{
            width: 100%;
        }
    </style>
</head>
<body>
    <div></div>
    <div class="outter">
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"> </div>
        <div class="item"></div>
    </div>
</body>
</html>

  • 照片显示思路

如何让照片显示在对应的div上,一般用余数的方法,照片的数量是固定,也就是照片除以我们的组数,余数对应到相关的div上就可以
django 没有提供页面求余数的方法这里需要我们自定义fittler计算

  • 自定义过滤器

① 在对应的app中创建templatetags文件
②在文件下创建.py文件
③写我们的自定义函数

from django import template

register = template.Library()

@register.filter
def mod_imgnum(forloop_count,div_num):

    return forloop_count%div_num

  • 整体页面效果
 <div class="outter">
        <div class="item">
            {% for i in obj_img %}
                {%  if forloop.counter|mod_imgnum:4 == 1 %}
                    <img src="/{{ i.src }}">
                    {{ i.title }}
                {% endif %}
            {%endfor  %}
        </div>
        <div class="item">
            {% for i in obj_img %}
                {%  if forloop.counter|mod_imgnum:4 == 2 %}
                    <img src="/{{ i.src }}">
                {% endif %}
            {%endfor  %}
        </div>
        <div class="item">
            {% for i in obj_img %}
                {%  if forloop.counter|mod_imgnum:4 == 3 %}
                    <img src="/{{ i.src }}">
                {% endif %}
            {%endfor  %}
        </div>
        <div class="item">
            {% for i in obj_img %}
                {%  if forloop.counter|mod_imgnum:4 == 0 %}
                    <img src="/{{ i.src }}">
                {% endif %}
            {%endfor  %}
        </div>
    </div>

二、通过js 的方法来构造图片展示

思路做一个接口,这个接口用ajax来接受返回信息

   <div></div>
    <div class="outter">
        <div class="item">
        </div>
        <div class="item">
        </div>
        <div class="item">
        </div>
        <div class="item">

        </div>
    </div>
</body>
<script src="/static/juery/jquery-1.12.4.js"></script>
<script>
    $.ajax({
        url:'/getimg/',
        type:'GET',
        dataType:"JSON",
        success:function (arg) {
            if(arg.status){
                var img_list = arg.data;
                $.each(img_list,function(index,v){
                    var eqv = index%4;
                    var divd = $('.outter').children().eq(eqv)
                    var tag = document.createElement('img')
                    tag.src="/"+v.src
                    divd.append(tag)
                })
            }
        }
    })
</script>
</html>
  • views
    from django.http import JsonResponse 可以自动json转换
from django.shortcuts import render,HttpResponse
from django.http import JsonResponse

# Create your views here.

from  cm import models
def img(request):
    return render(request,"index.html")

def get_img(request):
    ret = {'status':True,'data':None}
    try:
        obj_img = models.Img.objects.values('id','src','title','summary')
        print(obj_img)
        ret['data'] = list(obj_img)
    except:
        ret['status'] = False

    return  JsonResponse(ret)
  • js最终版本


    image.png
     $(function () {
        var obj = new ScrollImg()
        obj.initImg();
        obj.scrollEvent();
    })
function ScrollImg(){
        this.nid = 0;
        this.lastPostion =3;
        this.initImg = function (){
            var that = this;
            $.ajax({
        url:'/getimg/',
        type:'GET',
        data:{"nid":NID},
        dataType:"JSON",
        success:function (arg) {
            if(arg.status){
                var img_list = arg.data;
                $.each(img_list,function(index,v){
                    var eqv = (that.lastPostion+index+1)%4;
                    console.log(eqv)
                    var divd = $('.outter').children().eq(eqv)
                    var tag = document.createElement('img')
                    tag.src="/"+v.src
                    divd.append(tag)
                    //当列表的长度等于循环的index+1时候执行下一次循环
                    if(index+1==img_list.length){
                            //that.nid = v.id
                           that.lastPostion =eqv;
                    }
                })
            }
        }
    })

        };
        this.scrollEvent = function () {
            var that =this;
                $(window).scroll(function () {
            //什么时候到达底部
            //文档内容高度
            var docHeight = $(document).height()
            //窗口的高度
            var winHeight = $(window).height()
            //滑轮滚动高度
            var scrollTop = $(window).scrollTop();
            //滚动条长度+窗口高度等于 文本高度
            if (winHeight+scrollTop == docHeight){
                console.log(1)
                ininImg();
            }
        })
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,332评论 1 92
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 16,668评论 4 61
  • 使用纯 CSS 实现 500px 照片列表布局 文章很长,因为介绍了如何一步一步进化到最后接近完美的效果的,不想读...
    HZ充电大喵阅读 2,830评论 0 4
  • 文:酷啡生活 (酷啡转型日记 系列文章) 今年年底我辞职了,目前计划2年时间转型为专业的生涯咨询师。 听到我辞职了...
    海兰生涯阅读 543评论 0 4
  • 挥笔之间,2017年已经悄无声息的溜走,可那雪迟迟不肯出现…… 晚上,闲暇时间翻了翻简书中其他作者发的作文,无意间...
    HEARTBEA阅读 234评论 1 1

友情链接更多精彩内容