javascript 简单的瀑布流

刚开始接触js,就想写写经典的瀑布流,搜了下网上的教程,发现大多是用jquery写的,非常简单,用它也不用考虑兼容性的问题(jquery已经考虑到了),就想自己用原生的js写个简单的瀑布流模型,暂且没有考虑到拖动时自动排版的情形,以后再添加。(发现用原生的js果然步骤比较多啊!很多方法都很底层的!)

<!DOCTYPE HTML>
<html>
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<title>waterfall flow</title>
		<style type="text/css" >
		    body{margin:0px;}
		    #main{width:840px;margin:0 auto;}
		    .flow{float:left;width:200px;margin:5px;background:#ABC;}
		</style>
		</style>

	</head>
	<body>
		<div id="main">
			<div class="flow" ></div>
			<div class="flow" ></div>
			<div class="flow" ></div>
			<div class="flow" ></div>
		</div>
	</body>
	<script type="text/javascript">

	    var flowlist = null;

	    if(document.getElementsByClassName){
			var flowlist = document.getElementsByClassName("flow");
		} else{
			/* 考虑IE的兼容性 */
			var flowlist = getMElementsByClassName("div","flow");
		}

		/* 初始化 */
		addItems(flowlist,3);

		function getMElementsByClassName (tagname,classname) {
			var res = [];
			var elements = document.getElementsByTagName("div");
			for (var i = 0; i < elements.length; i++) {
				if(elements[i].className == classname)
					res.push(elements[i]);
			};
			return res;
		}

		function addItems(elements,times){
			for (var j = 0; j < times; j++) {
				for (var i = 0; i < elements.length; i++) {
					var newnode = document.createElement("div");
					newnode.style.background="#159";
	           		newnode.style.width="90%";
	           		newnode.style.height=getRandom(200,300)+"px";
	          		newnode.style.margin="10px";
					elements[i].appendChild(newnode);
				};
			};
		}

		/* 考虑兼容性,使用document.documentElement.scrollTop
		   使用DOM0事件 */
		window.onscroll = function(){
			 // 被卷去的高度
			 var scrollTop = document.documentElement.scrollTop;
			 // 页面高度
			 var pageHeight = 	document.body.scrollHeight;
			 // 可视区域高度
			 var viewHeight =  window.screen.availHeight;
			 console.log("被卷去的高度:"+scrollTop + " "+"页面高度:"+pageHeight+" "+"可视区域高度:"+viewHeight);
			 //当滚动到底部时
            if((scrollTop+viewHeight)>(pageHeight-20)){
                if(scrollTop<10000){//防止无限制的增长
                    addItems(flowlist,2);
                }
            }
		}

		function getRandom(min,max){
        	//x上限,y下限
        	var x = max;
        	var y = min;
        	if(x<y){
            	x=min;
            	y=max;
        	}
        	var rand = parseInt(Math.random() * (x - y + 1) + y);
        	return rand;
    	}

	</script>
</html>

效果图:

时间: 2024-12-07 04:25:49

javascript 简单的瀑布流的相关文章

利用JS实现简单的瀑布流效果

哈哈, 我又来啦, 在这一段时间里, 我简单的学习了一下javascript(JS), 虽然不是很懂啦, 但是我也简单的尝试着做了点小东西, 就比如现在流行的瀑布流效果, 经过我的努力终于成功的完成了, 虽然中间非常的坎坷, 并不是一帆风顺但是最终我还是实现了个简单的效果, 下面就为大家简单的介绍下, 不知道的友友们, 有兴趣的话, 可以来参考下, 欢迎指出缺点和不足! 一.瀑布流之准备工作   首先声明下, 为了方便演示和联系, 我使用的是本地图片, 如果大家有需要的话可以尝试着写下网络的,

简单的瀑布流

最近需要一个简单的瀑布流效果,所以网上找了一个,修改了部分代码 1.轻量代码,压缩2kb. 2.适用宽度自适应布局.瀑布流列由css控制.(先加入空列,获取宽度,删除空列,根据总宽计算列数.) wall.js "use strict"; (function ($) { $.fn.jaliswall = function (options) { this.each(function () { var defaults = { item: '.wall-item', columnClass

AJAX异步实现简单的瀑布流

传统瀑布流布局ul-li,需要先设定显示几列,每列是一个li,需要左浮动并指定宽度,li里面的布局也要先布局好,主要是要定宽,高度自动:然后通过ajax异步,从数据库中得到数据,遍历后将数据插入最矮的li中 HTML中的代码: <!--定义JS中需要的数据--><script type="text/javascript">var ajaxHandle='<{:U("Index/Typeshow/ajax","",&q

用原生JavaScript实现图片瀑布流的浏览效果

学习JS,活跃思维,灵活运用的一个较为典型的学习案例.同一个瀑布流的效果但实现方式却很多,利用递归.冒泡等等手法都可以达到你想要的目的.这次要说的就是利用类似递归来实现此效果的原创方案.此方案个人认为难度系数较低 1 <?php 2 //没有数据源,利用遍历对应文件夹中的所有的图片得到的数组模拟成数据源 3 $arr = array(); 4 $dir = @opendir('images'); 5 while($file = @readdir($dir)){ 6 if($file == '.'

简单瀑布流封装

function createLi(){ var oLi=document.createElement('li'); oLi.style.height=parseInt(50+Math.random()*400)+'px'; oLi.style.background='rgb('+rnd(0,255)+','+rnd(0,255)+','+rnd(0,255)+')'; return oLi; }; function rnd(n,m){ return parseInt(Math.random()

iOS之简单瀑布流的实现

iOS之简单瀑布流的实现 前言 超简单的瀑布流实现,这里说一下笔者的思路,详细代码在这里. 实现思路 collectionView能实现各中吊炸天的布局,其精髓就在于UICollectionViewLayout,因此我们要自定义一个layout来继承系统的UICollectionViewLayout,所有工作都在这个类中进行. 1.定义所需属性 瀑布流的思路就是,从上往下,那一列最短,就把下一个item放在哪一列,因此我们需要定义一个字典来记录每一列的最大y值 每一个item都有一个attrib

简单几行代码实现瀑布流

<!DOCTYPE html> <html> <!-- author : wsj aim : bky date : 2019-12 bug : no --> <body> <style> .father{ width: 100%;    box-sizing: border-box;     column-count: 2;    column-gap:15rpx;    padding: 0 20rpx; } .list{ box-sizing

js实现瀑布流

下午查找了瀑布流的相关原理,找了一些css3实现的还有js实现的,最后总结了一些比较简单的,易懂的整理起来 1.css3实现 只要运用到    column-count分列 column-width固定宽度 column-gap设置列间的间隔 break-inside:avoid防止换行 注意: Internet Explorer 9及更早 IE 版本浏览器不支持 column-count 属性. 下面是一个例子: html代码: <!DOCTYPE html> <html> &l

vuejs和webpack项目(VueComponent)初尝试——瀑布流组件

碎碎念:     好久不见,最近自己有些懈怠没更过多少博,主要原因之一是对自己学习方式的一些思考,翻看之前的博客多是记录学习笔记这反映出了自己对于前端还停留在学习-复习知识点的阶段压根没多少实践经验啊这让我有些惶恐,原因之二是前段时间接触并了解性地学习了amd,cmd模块,angular和vue,一些模板引擎,less预编译语言,以及开发相关的各种构建工具...讲真前端真的好杂,心有余而力不足有时就挺迷茫,所以这些仅仅只是接触是接触跟着官网了解学习并没有深入原理性的探索学习.曾经我在一开始就尝试