我不是天使:javascript原生手动分页组件​zhuanlan.zhihu.com

我不是天使:javascript原生自定义轮播图组件​zhuanlan.zhihu.com

一大早就去办签证,啦啦啦♪(^∇^*)我要去日本玩了。先嘚瑟下,没办法啦,这是我人生第一次出远门,紧张ing,还只是跟朋友自助游,不参加任何的旅游团。

不过也不知道签证能不能拿下来就是了,我的情况好麻烦啊,又是银行证明,又是公司营业执照证明,朋友是公务员,还是事业单位,轻轻松松打张便条说不方便透露“国家机密”,流程比我简洁得多得多,不行,到时候如果一起玩的时候,一定要狠狠的坑她一把。

还是嗨森+高兴(〃'▽'〃)

实现功能:

  • 1.一个页面可以多个瀑布流(我的那个运用的项目是十个艹)
  • 2.自定义瀑布大小
  • 3.自控制瀑布之间的距离
  • 4.自选择是否开启浏览器缩放 - 动态改变瀑布流
  • 5.瀑布流中存在图片,加载高度准确
  • 6.自写瀑布模板
  • 7.ajax加载后实例化瀑布流,滚动可ajax加载后追加瀑布流内容......

实例代码:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>javascript原生瀑布流+图片懒加载组件</title><style>/** * { margin:0;padding: 0;}会导致每个标签一开始就初始化,耗性能不适用 **/body, div, ul, ol, li, p, img, a, span{ margin:0;padding:0;}li { list-style: none;}.block { display: block;}.mtb10 { margin: 10px 0;}.ellipsis4 { overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 4;-webkit-box-orient: vertical;}.water-content { padding: 19px 28px;background-color: #F9F9F9;font-size: 12px;line-height: 1.7;color: #666;}.title { font-size: 14px;line-height: 1.5;color: #333;font-weight: 600;}#waterfall { position: relative;}</style></head><body><ul id="waterfall"></ul><div id="goon">继续查看</div></body><script>/*** 瀑布流组件* @params obj 配置参数* @author hmt*/function Waterfall(obj) {this.width = obj.width || 200; //每块石头的大小this.spacing = obj.spacing || 10; //每块石头的间距this.distance = this.width + this.spacing; //每块石头的宽度总和this.resize = obj.resize || false; //是否开启浏览器缩放this.scroll = obj.scroll || false; //是否开启页面滚动加载this.image_field = obj.image_field; //石头中存在图片,图片代表的字段keythis.template = obj.template || function() {}; //石头渲染模板this.wrap = obj.wrap; //瀑布容器this.wrapId = obj.wrap.id; //瀑布容器的idthis.bindEvent(); //绑定事件}Waterfall.prototype = {constructor: Waterfall, //构造函数指向原函数append: function(list) { //瀑布容器追加构建dom内容var itemTagName = 'DIV';if (this.wrap.tagName === 'UL') { //容器如果是ul节点,则生成的石头是子节点itemTagName = 'LI';}var exist_image_length = 0; //存储需要加载的图片个数var load_image_length = 0; //存储加载完成的图片个数var $this = this;for (var l = 0; l < list.length; l++) { //创建dom结构var item = document.createElement(itemTagName);item.className = this.wrapId + '_item';item.style.position = 'absolute';item.style.width = this.width + 'px';item.innerHTML = this.template(list[l]); //渲染石头的自定义模板内容if (list[l][this.image_field]) { //判断存在需要加载的图片exist_image_length++;var waterfallImage = new Image();waterfallImage.src = list[l][this.image_field];waterfallImage.onload = function() { //当所有图片加载成功后,才开始构建瀑布流load_image_length++;if (load_image_length === exist_image_length) {$this.change();}}}this.wrap.appendChild(item);}if (exist_image_length === 0) { //如果从头到尾都没有图片需要加载,直接构建瀑布流this.change();}},bindEvent: function() {if (this.resize) { //开启浏览器缩放,重新绘制瀑布流window.addEventListener('resize', this.change.bind(this));}if (this.scroll) { //开启滚动条滚动,自动加载瀑布流var $this = this;window.addEventListener('scroll', function() {var srcollTop = document.documentElement.scrollTop || document.body.scrollTop;if (srcollTop + document.documentElement.clientHeight  >= document.body.scrollHeight - 20) {console.log('不建议开启,通常是异步请求,友好体验加载过程,建议放在页面上监听,除非死数据');};});}},findMinIndex: function(heights) { //寻找在当前所有瀑布中,高度最小的那条索引var m = 0;for (var z = 0; z < heights.length; z++) {m = Math.min(heights[m], heights[z]) === heights[m] ? m : z; //取最矮的那个高度索引}return m;},change: function() { //构建瀑布流var number = Math.floor(this.wrap.clientWidth / this.distance); //一行能容纳多少颗石头,并向下取整if (number <= 0) {return false;}var items = document.getElementsByClassName(this.wrapId + '_item');var arrayHeights = [];for (var i = 0; i < items.length; i++) {var j = i % number;if (arrayHeights.length === number) { //一行排满后,自动切换至下一行var minIndex = this.findMinIndex(arrayHeights);items[i].style.left = this.distance * minIndex + 'px';       items[i].style.top = arrayHeights[minIndex] + this.spacing + 'px';arrayHeights[minIndex] += items[i].offsetHeight + this.spacing;} else{arrayHeights[j] = items[i].offsetHeight;      items[i].style.left = this.distance * j + 'px';items[i].style.top = 0;}}this.setParentHeight(number, arrayHeights); //重置这个瀑布容器的高度},setParentHeight: function(n, array) {var a = 0;if (array.length > 1) {for (var b = 0; b < Math.min(n, array.length); b++) {a = Math.max(array[a], array[b]) === array[a] ? a : b; //取最高的那个高度索引}}this.wrap.style.height = array[a] + 'px';}}</script><script>var mockData = [{banner: 'img/0.jpg', title: '新华社华南理工大学“华南虎”战队夺得2017机甲大师赛总冠军-2017机甲大师赛总冠军',descript: '8月6日,华南理工大学“华南虎”战队获得总冠军。当日,第16届全国大学生机器人大赛RoboMaster2017机甲大师全国总决赛在深圳举行'}, {banner: 'img/0.jpg', title: '图片为默认图-图片为默认图图片为-默认图图片为默认图图图片为-默认图图片-图图片为默认图图片-图图片为默认图图片',descript: '为持续提升学校教学督导委员会的业务能力,2018年9月13日上午,40多名教学督导员走进教育技术中心,融入到学校信息化教学的常用情境中化教学督导能力'}, {banner: 'img/0.jpg', title: '教学督导员走进教育技术中心,提升信息化教学督导能力',descript: '为持续提升学校教学督导委员会的业务能力,2018年9月13日上午,40多名教学督导员走进教育技术中心,融入到学校信息化教学的常用情境中化教学督导能力'}, {banner: 'img/0.jpg', title: '“华南虎”战队夺得2017机甲大师',descript: '8月6日,华南理工大学“华南虎”战队获得总冠军。当日,第16届全国大学生机器人大赛Rob'}];var waterfall = new Waterfall({ //实例化组件wrap: document.getElementById('waterfall'), //瀑布容器width: 250, //石头大小,默认200spacing: 15, //石头间距,默认10resize: false, //不开启浏览器缩放,默认不开启//scroll: false, //不建议开启,页面自行滚动方法异步加载最佳咯,默认不开启image_field: 'banner', //若石头中存在图片,则图片的字段key,默认不存在template: function(data) { //石头渲染内容模板var randomImgIndex = Math.floor(Math.random() * 97); //假数据if (data.banner) {data.banner = 'img/' + randomImgIndex + '.jpg';}var fixedContent = '<div class="water-content">' +'<p class="title">'+ data.title +'</p>' +'<div class="mtb10 ellipsis4">'+ data.descript +'</div>' +'</div>';return data.banner ? '<img class="block" src="' + data.banner +'" width="100%" />' + fixedContent : fixedContent;}});waterfall.append(mockData); //实例化的组件追加document.getElementById('goon').onclick = function() {waterfall.append(mockData); //页面点击操作实例化后的组件追加}</script>
</html>

希望签证能下来,能下来,能下来,能下来,能下来!!!!!

分页组件change_javascript原生瀑布流+图片懒加载组件相关推荐

  1. js实现审批流_小程序瀑布流组件:支持翻页与图片懒加载

    电商小程序中,用到瀑布流的地方非常多,每次都写一个瀑布流,重复一次逻辑,作为程序员,肯定是非常不愿意的. 瀑布流的形式都是大同小异,不同的是瀑布流中每个模块的内容,随业务而变化. 所以,我们把瀑布流框 ...

  2. swiper 定义放多少张图片_小程序瀑布流组件:支持翻页与图片懒加载

    (给前端大全加星标,提升前端技能) 作者:老人羽海 https://segmentfault.com/a/1190000022680541 电商小程序中,用到瀑布流的地方非常多,每次都写一个瀑布流,重 ...

  3. 可免费阅读各种漫画的微信小程序,内附好用的图片懒加载组件

    一个基于漫画台App原生应用的漫画阅读的微信小程序.所有漫画可免费观看(前提是得有资源?). 项目地址:github源码 API接口文档:API 前言? 在学习一门新的语言或者框架时,做好的方法应该是 ...

  4. 2023年高频前端面试项目考点(npm,git,webpack,TS4,sass,瀑布流,懒加载)

    合集:2023年最全前端面试题考点HTML5+CSS3+JS+Vue3+React18+八股文+手写+项目+笔试_参宿7的博客-CSDN博客 *表示回顾基础知识 项目为二面三面,面试官基本就是照着简历 ...

  5. 微信小程序全栈开发实践 第二章 微信小程序组件介绍及使用 -- 2.10 image组件,如何实现图片懒加载?

    一.与image组件有关的技术问题 1.1 什么是WebP? webp是image组件的一个boolean属性,开启这个属性之后,代表url可以设置webp这种格式的图片.webP是一种同时提供了有损 ...

  6. 列表懒加载和图片懒加载

    参考链接整理: element-ui自带的图片懒加载指令和列表懒加载指令 element-ui 图片懒加载 element-ui 列表懒加载 原理和原生js:图片懒加载 如何用原生js实现图片懒加载( ...

  7. 小程序swiper怎么让内容撑开高度_小程序瀑布流组件:支持翻页与图片懒加载

    电商小程序中,用到瀑布流的地方非常多,每次都写一个瀑布流,重复一次逻辑,作为程序员,肯定是非常不愿意的. 瀑布流的形式都是大同小异,不同的是瀑布流中每个模块的内容,随业务而变化. 所以,我们把瀑布流框 ...

  8. java页面展示流式图片,javascript瀑布流式图片懒加载实例解析与优化

    之前写过一版图片"懒加载"的文章,刚好周末在整理文件的时候,大概又看了一遍之前写的代码发现有很多可以优化的地方. 这篇文章主要就是结合上篇<javascript瀑布流式图片懒 ...

  9. 微信小程序媒体组件-image图片懒加载效果

    image 基础库 1.0.0 开始支持,低版本需做兼容处理. 图片.支持 JPG.PNG.SVG.WEBP.GIF 等格式,2.3.0 起支持云文件ID. 属性 类型 默认值 必填 说明 最低版本 ...

最新文章

  1. 论文推荐 | 目标检测中不平衡问题算法综述
  2. 商汤提基于贪心超网络的One-Shot NAS,达到最新SOTA | CVPR 2020
  3. grep与sed批量处理多个文件中的字符串的方法
  4. MySQL / schema的概念
  5. ipython源代码怎么打开_CentOS 6.4 中IPython如何启动Qt控制台和NoteBook?
  6. Go Slice 使用中的小陷阱
  7. xcache安装配置
  8. 腾讯正式下线PC版QQ秀 网友:我的时代落幕了
  9. C语言深度解剖:关键字
  10. [转]JavaScript继承详解
  11. vim 保存文件的回车换行模式
  12. java随机抽题系统_2020税务师机考模拟系统全新上线,智能题库 随机组卷,快来试手...
  13. 海量数据处理 算法总结
  14. 服务器lga771芯片组,LGA775主板改造用771 CPU教程
  15. 复合型网络拓扑结构图_网络拓扑结构大全和图片(星型、总线型、环型、树型、分布式、网状拓扑结构)...
  16. 标准柯西分布_柯西分布设独立随机变量X和Y都服从标准正态 – 手机爱问
  17. Excel怎么把横排变竖排,一键转换表格格式
  18. Android : TextView
  19. 树莓派 raspbian 系统常用命令
  20. 武汉旅游攻略(部分)

热门文章

  1. [Linux + 深度学习]Ubuntu18.04 深度学习环境配置
  2. Hbase数据结构+hbase shell基本语法
  3. java构建学生对象布尔类型,Java如何将原始布尔类型转换为布尔对象?
  4. 安装php扩展 ffmpeg-php
  5. 【莫比乌斯反演】[HYSBZ/BZOJ2693]jzptab
  6. (转)Mahout Kmeans Clustering 学习
  7. CSS教程--CSS 属性选择器
  8. 操作系统和语言的关系(转载)
  9. Windwows7 下安装mysql5
  10. [转载] python无法从nltk中调取文本 from nltk.book import *