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 相关文章推荐
[原创]后缀就扩展名为js的文件是什么文件
Dec 06 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
Apr 26 Javascript
javascript函数式编程实例分析
Apr 25 Javascript
javascript字符串循环匹配实例分析
Jul 17 Javascript
BootStrap table表格插件自适应固定表头(超好用)
Aug 24 Javascript
快速入门Vue
Dec 19 Javascript
如何在Angular2中使用jQuery及其插件的方法
Feb 09 Javascript
Vue 莹石摄像头直播视频实例代码
Aug 31 Javascript
浅析vue-router原理
Oct 19 Javascript
详解webpack引入第三方库的方式以及注意事项
Jan 15 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
Jun 25 Javascript
原生JS生成指定位数的验证码
Oct 28 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 分页函数multi() discuz
2009/06/21 PHP
PHP 超链接 抓取实现代码
2009/06/29 PHP
php stripslashes和addslashes的区别
2014/02/03 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
PHP连接MYSQL数据库实例代码
2016/01/20 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
javascript 实现 秒杀,团购 倒计时展示的记录 分享
2013/07/12 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
JavaScript中this详解
2015/09/01 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
Javascript实现关闭广告效果
2021/01/29 Javascript
python写xml文件的操作实例
2014/10/05 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
医院护理人员的自我评价分享
2013/10/04 职场文书
户外活动总结范文
2014/04/30 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
离婚被告答辩状
2015/05/22 职场文书
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle