碎碎念:
     好久不见,最近自己有些懈怠没更过多少博,主要原因之一是对自己学习方式的一些思考,翻看之前的博客多是记录学习笔记这反映出了自己对于前端还停留在学习-复习知识点的阶段压根没多少实践经验啊这让我有些惶恐,原因之二是前段时间接触并了解性地学习了amd,cmd模块,angular和vue,一些模板引擎,less预编译语言,以及开发相关的各种构建工具...讲真前端真的好杂,心有余而力不足有时就挺迷茫,所以这些仅仅只是接触是接触跟着官网了解学习并没有深入原理性的探索学习。
曾经我在一开始就尝试深入原理的学习,实践后发现这种学习方式并不适合初学新知识,对于新知识的学习应该还是要循序渐进由浅入深,想不通的点可以先放下到后来理解多了再领悟,不然一开始就探索原理会导致自己进入过度思考的误区深陷不出来,嗯,还是等有实践经验和时间的积累后自然而然就会想明白。就比如虽然我这次用VueJs和webpack工具流实现了一个简单的瀑布流组件,其实我是经历了如下心里路程:
1.因实验室项目需要学习了下瀑布流(JS方式)布局的实现,当然还有用纯css实现的方式(CSS3的学习--实现瀑布流),理清实现原理(瀑布流布局)后用HTML,CSS,JS快速实现了瀑布流的初版,对于JS的执行过程和页面的渲染过程我还是相对了解的于是也就没什么难度。

2.但是程序员不能总停留在编写这些没有复用的程序,开发过程效率低的阶段吧,他们说聚聚们都在玩转各种构建工具和框架,作为菜鸟的我碰巧最近在学习vueJS和Less,于是想把一些有趣的东西用vue写成组件的形式,一来作为一次自我尝试二来熟悉一下vue+webpack的开发流程(即使现在的我对于webpack的执行机制还是有些云里雾里的)。

3.于是需要对瀑布流小项目进行包装,vue框架还好本质上还是JS嘛,因为多了一层webpack构建工具让这个小项目看起来略复杂(如果你要究webpack的执行机制的话)。但是现阶段作为初学者的我只是会用但并没吃透webpack的原理,这个不急,项目先实现了再说。

4.对于nodeJS和npm,AMD,CMD,ES6有所了解这是前提,之后该项目需要用到如下技术和知识,没关系用的时候再翻看文档

vue-cli项目引用.vue组件

安装 | vue-router文档 npm package

Less快速入门

Vue组件

用vue-cli初始化本项目,和webpack搭配完成一套集开发,测试,发布的流程(简单起见我的项目省略了测试的步骤);
vue-router用于index主页的路由管理,因为之后想把VueComponent做成一个项目用来收纳各种有趣的组件,Waterfall.vue只是本次尝试实现的一个组件模块,后续可能还会有其它的组件;Less用于Waterfall.vue组件中css的编写。

项目代码

Waterfall.vue组件的完整代码如下(后期可以完善ajax请求数据加载的功能):

<template>
<div id="wf">
<div v-for="item in items">
<img v-bind:src="item.src">
</div>
</div>
</template> <script type="text/javascript">
/**
* init
*/
var $items, itemWidth, time;
window.addEventListener('resize', function(){
clearTimeout(time);
time = setTimeout(function(){
wf.arrange();
}, 500);
}); /**
* 时间大小的设置决定是先加载img还是arrange布局
*/
setTimeout(function(){
$items = document.querySelectorAll('#wf div');
itemWidth = $items[0].offsetWidth;
wf.arrange();
}, 0); /**
* 随机高度,随机图片,布局函数
*/
var wf = {
rdmImg: function(){
var width = Math.floor(Math.random() * 100) + 300,
height = Math.floor(Math.random() * 500) + 300;
return "http://placekitten.com/" + height + '/' + width;
},
rdmHeight: function(){
return Math.round(Math.random() * 200) + itemWidth;
},
arrange: function(){
var viewWidth = document.documentElement.clientWidth || document.body.clientWidth,
cols = Math.floor( viewWidth / itemWidth ); //存放每列当前长度的数组并初始化
var colsHeight = [];
for(var i = 0; i< cols; i++){
colsHeight.push(0);
}
//安置每一项item
$items.forEach( function(ele, idx) {
var curHeight = colsHeight[0], col = 0;
for(var i = 0; i< colsHeight.length; i++){
if(colsHeight[i] < curHeight){
curHeight = colsHeight[i];
col = i;
}
}
ele.style.left = col * itemWidth + 'px';
ele.style.top = curHeight + 'px';
ele.style.height = wf.rdmHeight() + 'px';
//console.log(ele.querySelector('img').src); // http://localhost:8080/ colsHeight[col] += ele.offsetHeight;
});
},
} /**
* export数据层
*/
var items = (function(){
var arr = new Array();
for(var i= 0; i< 10; i++){
var img = {};
img.src = wf.rdmImg();
arr.push(img);
}
return arr;
})();
export default{
data () {
return {
items: items,
}
}
} </script> <style lang="less">
@width: 200px;
@padding: 20px; #wf{
position: relative;
margin: 0 auto;
div{
width: @width;
position: absolute;
top: 0;
left: 0;
padding: @padding;
border: solid 1px grey;
border-radius: 4px;
.transition(left 1s);
img{
width: 100%;
position: relative;
top: 50%;
transform: translateY(-50%);
}
}
} .transition(@transition){
-webkit-transition: @transition;
-moz-transition: @transition;
-o-transition: @transition;
transition: @transition;
}
</style>

完整项目放于github:https://github.com/venoral/VueComponent

效果图:index主页略丑,仅实现路由功能了,后期会完善的。

最后想给自己说的话就是
      有想法就去实现啊,list列了一大堆而拖欠的人不配拥有想法。

vuejs和webpack项目(VueComponent)初尝试——瀑布流组件的更多相关文章

  1. 基于.NetCore开发博客项目 StarBlog - (10) 图片瀑布流

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  2. 自己实现vue瀑布流组件,含详细注释

    我知道vue有瀑布流插件vue-waterfall-easy,但是使用的时候与我的预期有部分别,所以就自己动手写了这个组件 人和动物的根本区别是是否会使用工具,我们不仅要会使用,还要会创造工具,别人提 ...

  3. vue2.0的瀑布流组件-使用说明

    做一个小项目,需要瀑布流,就选他了,先看看效果 使用瀑布流布局组件:vue-waterfall-easy 下载引入: 方式一:直接从git上复制组件的完整代码,引入vue组件文件即可 import v ...

  4. vue-waterfall2 基于Vue.js 瀑布流组件

    vue-waterfall2 1.宽度自适应,数据绑定特效(适用于上拉加载更多) 2.自定义程度高 3.使用极为简便,适用于PC/移动端 4.提供resize(强制刷新布局-适用于下拉刷新)/mix( ...

  5. 原生JS实现瀑布流

    浏览网页的时候经常会遇到瀑布流布局的网站.也许有些读者不了解瀑布流.瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数 ...

  6. 瀑布流StaggeredGridView 下拉刷新

    1.项目中用到了瀑布流,之前用的是PinterestLikeAdapterView这个控件  然后上拉加载更多跟下拉刷新用的是XListView ,但是加载更多或者下拉刷新的时候闪屏,对用户体验很不好 ...

  7. vue.js实现瀑布流之vue-waterfall-easy

    想必大家应该很多都已经习惯了jquery的DOM操作,jquery的瀑布流实现起来也很容易. 但是,随着时代的发展,随着时代的进步..... 算了算了,扯远了,既然能找到这儿来,肯定是在vue.js上 ...

  8. iOS 瀑布流封装

    代码地址如下:http://www.demodashi.com/demo/12284.html 一.效果预览 功能描述:WSLWaterFlowLayout 是在继承于UICollectionView ...

  9. 堆糖瀑布流完整解决方案(jQuery)

    2010年堆糖创办以来,网站界面经历过3-5次重大改版,logo也曾更换过两次,早期蓝红相间三个圈的logo恐怕很少有人记得了.与此同时,前端 js 框架也在默默的更新换代.最早堆糖上线时,js 采用 ...

随机推荐

  1. 你真的了解HTML吗?–雅虎面试题

    http://helloweb.wang/jingyan~jiqiao/589.html

  2. 移植opencv到pcDuino

    OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Pytho ...

  3. hadoop程序MapReduce之SingletonTableJoin

    需求:单表关联问题.从文件中孩子和父母的关系挖掘出孙子和爷奶关系 样板:child-parent.txt xiaoming daxiong daxiong alice daxiong jack 输出: ...

  4. cocos2dx游戏--欢欢英雄传说--添加攻击按钮

    接下来添加攻击按钮用于执行攻击动作.同时修复了上一版移动时的bug.修复后的Player::walkTo()函数: void Player::walkTo(Vec2 dest) { if (_seq) ...

  5. 【整理】Virtualbox中的网络类型(NAT,桥接等),网卡,IP地址等方面的设置

    之前是把相关的内容,放到: [已解决]实现VirtualBox中的(Guest OS)Mac和主机(Host OS)Win7之间的文件和文件夹共享 中的,现在把关于网络配置方面内容,单独提取出来,专门 ...

  6. 通过([AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.Read)] )在前台html页面调用cs方法

    app_code中CS代码( Cs页面文件名public class ajaxGET): [AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement ...

  7. 【GIT】Git Flow最佳实践

    Git Flow 工作流一共包含五种分支: 两个长期分支: 主分支 master:用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版 开发分支 develop:用于日常开发,存放最新的 ...

  8. office2010如何使用excel冻结窗格

    当我们在制作一个Excel表格时,如果列数较多,行数也较多时,一旦向下滚屏,则上面的标题行也跟着滚动,在处理数据时往往难以分清各列数据对应的标题,事实上利用"冻结窗格"功能可以很好 ...

  9. bzoj 3307 雨天的尾巴

    题目链接:传送门 题目大意:中文题,略 题目思路:网上有题解说是合并线段树的,但是太难蒟蒻不会,只能用树剖求解 如果不是树而是一维数组我们会怎么解? 当然是利用前缀和思想标记 (L) v+1,(R+1 ...

  10. 重构(Refactoring)技巧读书笔记(General Refactoring Tips)

    重构(Refactoring)技巧读书笔记 之一 General Refactoring Tips, Part 1 本文简要整理重构方法的读书笔记及个人在做Code Review过程中,对程序代码常用 ...