JavaScript利用ajax实现下拉式瀑布流布局

逻辑

首先用flask框架从数据库中拿之前爬取豆瓣读书的四十张图书封面,然后搭建好flask,然后写一个HTML的文件,做一个简单界面,使用jQuery滑动事件动态增加div,将ajax接受的数据处理给每个新增的div,调整好鼠标滚动时间和文档高度和窗口高度的值,即便成功

代码

python代码:

from flask import Flask,render_template,jsonify,request
import pymysql

app = Flask (__name__)


@app.route ("/")
def index():
    return render_template ("index.html")


@app.route ("/show/",methods=["GET","POST"])
def pbl():
    a = my_sql ()
    # 利用ajax传回来的数据判断生成器的次数
    res = request.args.get ('a')
    for i in range (int (res) - 1):
        next (a)
    return jsonify (next (a))


def my_sql():
    py = pymysql.connect ("127.0.0.1","root","","itxdl")
    cursor = py.cursor ()
    # 每次按顺序拿6张书的封面图的url
    sql = ["select title,imgurl from douban limit %d,6" % i for i in range (0,31,6)]
    for i in sql:
        cursor.execute (i)
        data = cursor.fetchall ()
        yield data
    py.close ()


if __name__ == '__main__':
    app.run (debug=True,host="127.0.0.1",port="8080")

HTML代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>瀑布流</title>
    <style>
        #a1 {
            margin-left:100px;
            width:1000px;
            height:750px;
            position:absolute;
            }
        .one {
            width:270px;
            height:340px;
            float:left;
            margin-left:50px;
            margin-top:20px;
            background-repeat: round;
            }


    
    </style>
</head>
<body>
<!--设置初始显示的六张图,简单排布一下-->
<div id="a1">
    <div class="one" style="background:url('../static/js/1.jpg');"></div>
    <div class="one" style="background:url('../static/js/3.jpg');"></div>
    <div class="one" style="background:url('../static/js/2.jpg');"></div>
    <div class="one" style="background:url('../static/js/4.jpg');"></div>
    <div class="one" style="background:url('../static/js/4.jpg');"></div>
    <div class="one" style="background:url('../static/js/3.jpg');"></div>
</div>
<script src="../static/js/jquery-1.8.3.min.js"></script>
<script>
        <!--设置一个数控制生成div的次数和生成器函数传回来的数据-->
        var n = 5
        <!--根据滚动条件每次添加新的6个div并把数据库的图片传上去-->
        $(document).scroll(function(){

                var y = $(window).scrollTop()
                var idx1 = $(document).height();
                var idx2 = $(window).height();
                if(idx1-(y+idx2)<=50){
                    make_div()

			}
		})

        <!--重新生成div并传图片-->
		function make_div(){
		    <!--因为只有40张图,控制图片显示完后不再瀑布-->
		    if(n<=36){
			    var i = $('<div class="one"></div><div class="one"></div><div class="one"></div><div class="one"></div><div class="one"></div><div class="one"></div>')
			    $('.one').eq(n).after(i)
			    n += 6
			    var num=(n-5)/6;
			    $.ajax({
                    url:"/show/",
                    type:"get",
                    data:{'a':num},
                    dataType:"json",
                    success:function(data){
                        for(var i=0;i<6;i++){
                            $(".one").eq(n+i-5).css('background','url('+data[i][1]+')')
                        }
                    },
                    error:function(){
                        alert("没有了")
                    },
                    timeout:2000,
                    async:false
                })
            }
		}

</script>
</body>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值