美文网首页
照片瀑布流排版

照片瀑布流排版

作者: 两点半的杂货铺 | 来源:发表于2018-03-04 11:24 被阅读183次

    一.利用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();
                }
            })
            }
        }
    

    相关文章

      网友评论

          本文标题:照片瀑布流排版

          本文链接:https://www.haomeiwen.com/subject/lzxxfftx.html