JS通过ajax + 多列布局 + 自动加载实现瀑布流效果


Posted in Javascript onMay 30, 2019

Ajax

•说明:本文效果是无限加载的,意思就是你一直滚动就会一直加载图片出现,通过鼠标滚动距离来判断的,所以不是说的那种加载一次就停了的那种,那种demo下次我会再做一次

css部分用的是html5+css3的新属性,图片会自动添加到每行的最顶端上去,而不是用js去判断。去除了一些js计算的麻烦。

css部分:

* {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    body {
      background: #352323 url(images/a.png);
    }
    img {
      display: block;
    }
    section {
      max-width: 95%;
      margin: 0 auto;
      overflow: hidden;
      column-count: 5;
      column-gap: 0;
      column-fill: auto;
    }
    figure {
      border: 2px solid pink;
      margin: 0 5px 10px;
      break-inside: avoid;
      padding: 5px;
    }
    figure img {
      width: 100%;
    }
    figcaption {
      padding: 10px 0;
      text-align: center;
      font-weight: 900;
      color: #a77869;
    }

html部分:

通过js插入节点,因为后台不知道多少张图片

<section>
    <!-- <figure>
      <img src="images/1.jpg" alt="">
      <figcaption>往后余生,风雪是你</figcaption>
    </figure> -->
</section>

js有两个部分,一个是我封装的ajax函数,和一些判断函数

第一部分

window.onload = function() {
    var section = document.getElementsByTagName('section')[0];
    //运行ajax函数;
    ajax('get', 'active.php', 'num=10', function(data) {
      //解析json对象
      let img_data = JSON.parse(data);
      console.log(img_data);
      //循环建多少图片配多少标签
      for (let i = 0; i < img_data.length; i++) {
        //建立figure标签
        let figure = document.createElement('figure');
        //创建两个子元素img和figcaption,并赋值
        let img = document.createElement('img');
        img.src = img_data[i];
        let figcaption = document.createElement('figcaption');
        figcaption.innerHTML = '往后余生,风雪是你';
        //插节点
        figure.appendChild(img);
        figure.appendChild(figcaption);
        section.appendChild(figure);
      }
    });
    document.onscroll = function() {
      var scrollTop = document.documentElement.scrollTop; //距离网页高度
      console.log(scrollTop);
      // var ks = document.documentElement.clientHeight; //可是化窗口高度
      var ks = window.innerHeight || document.documentElement.clientHeight; //可是化窗口高度/兼容方法
      var ht = document.documentElement.offsetHeight; //html总高度
      // console.log(ht);
      if (scrollTop + 1 >= ht - ks) { //鼠标滚动的距离大于html总高度-窗口的距离(也就是html在可视窗口之下的总高度)时 触发函数;
        //执行函数
        ajax('get', 'active.php', 'num=10', function(data) {
          //解析json对象
          let img_data = JSON.parse(data);
          console.log(img_data);
          //循环建多少图片配多少标签
          for (let i = 0; i < img_data.length; i++) {
            //建立figure标签
            let figure = document.createElement('figure');
            //创建两个子元素img和figcaption,并赋值
            let img = document.createElement('img');
            img.src = img_data[i];
            let figcaption = document.createElement('figcaption');
            figcaption.innerHTML = '往后余生,风雪是你';
            //插节点
            figure.appendChild(img);
            figure.appendChild(figcaption);
            section.appendChild(figure);
          }
        });
      }
    }
  };

第二部分:

/**
 * ajax封装
 * @param {string} mehod请求数据方法
 * @param {string} url 请求地址
 * @param {string} data 请求参数
 * @param {[functiong]} success [请求成功之后执行的函数0]
 * @return {[none]} none
 */
function ajax(mehod, url, data, success) {
  var xhr = null;
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else {
    xhr = new ActiveXObject("Microsoft.xmlhttp")
  }
  //如果有参数get方法需要拼接字符串url+?+data
  if (mehod === 'get' && data) {
    url += '?' + data;
  }
  //open方法
  xhr.open(mehod, url, true);
  //send方法
  if (mehod === 'get') {
    xhr.send();
  } else {
    xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
    xhr(data);
  }
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
      success && success(xhr.responseText);
    }
  }

php后台数据

因为主要功能偏向前端,所以后端就通过本地文件载入的

<?php 
header("Content-type:text/html;charset=utf-8");
$num = $_GET['num']; // api调用者传递的需要的图片页数 
$img = file("img.txt");
// var_dump($img);
$array_url = array();
for($i=0;$i<$num;$i++){
  $url = array_rand($img);
  array_push($array_url,$img[$url]);
}
$a = json_encode($array_url);
echo $a;

JS通过ajax + 多列布局 + 自动加载实现瀑布流效果

总结

以上所述是小编给大家介绍的JS通过ajax + 多列布局 + 自动加载来实现瀑布流效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
动态改变textbox的宽高的js
Oct 26 Javascript
鼠标滑上去后图片放大浮出效果的js代码
May 28 Javascript
JS获得图片alt信息的方法
Apr 01 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
Sep 06 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
Feb 10 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
Nov 29 Javascript
bootstrap模态框关闭后清除模态框的数据方法
Aug 10 Javascript
JavaScript实现构造json数组的方法分析
Aug 17 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
Oct 31 Javascript
JavaScript简单编程实例学习
Feb 14 Javascript
Vue computed 计算属性代码实例
Apr 22 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
Jan 20 Javascript
全面分析JavaScript 继承
May 30 #Javascript
浅谈Express.js解析Post数据类型的正确姿势
May 30 #Javascript
vue组件三大核心概念图文详解
May 30 #Javascript
详解一次Vue低版本安卓白屏问题的解决过程
May 30 #Javascript
基于iview的router常用控制方式
May 30 #Javascript
深入了解js原型模式
May 30 #Javascript
js逆向解密之网络爬虫
May 30 #Javascript
You might like
无数据库的详细域名查询程序PHP版(1)
2006/10/09 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
python实现图片横向和纵向拼接
2020/03/05 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
生物科学专业个人求职信范文
2013/12/07 职场文书
最新创业融资计划书
2014/01/19 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
毕业生就业协议书
2014/04/11 职场文书
大型活动组织方案
2014/05/10 职场文书
求职信格式要求
2014/05/23 职场文书
政治学求职信
2014/06/03 职场文书
免职证明样本
2014/10/23 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android