算法:如何划分网格列宽(如谷歌chrome)
Algorithm: how to divide grid column width ( like google-chrome )
我正在使用JavaScript构建一个流体(html)网格。我喜欢使用装箱算法来订购网格项目。网格应按百分比或网格中给定数量的列来划分列。
我一直在寻找或创建一个可以"同等"插入列的算法(如下面的例子)。由于很多浏览器处理这种不同的(亚像素渲染),我喜欢通过JavaScript设置列宽。我喜欢谷歌浏览器(38.0.2125.104)划分像素的方式。希望有人能帮助我或向我展示这是如何做到的。Chrome如何做到这一点的一个例子:
宽度:100px-3列(33.333333333%)
33px | 34px | 33px |
宽度:100px-8列(12.5%)
13px | 12px | 13px | 12 px | 13 px | 12像素| 13像素| 12像素
宽度:99px-4列(25%)
25px | 25px | 24px | 25px
宽度:99px-8列(12.5%)
12px | 13px | 12px | 13 px | 12 px | 12像素| 13像素| 12像素
我甚至找到了剩余的,但我甚至不知道这是否是一条路。我做了一些测试,试图重现上面的内容,但毫无希望地失败了。
<div class="grid">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
var x = 3; //divisor (3 columns)
var y = 100; //number (100 px)
var rem = y % x; //remainder (modulo (or bitwise))
console.log(rem); //output: 1
一个简单的jsfiddle:http://jsfiddle.net/dgvc268n/.为了确保清楚我的问题。我主要寻求算法方面的帮助(像chrome一样重新创建项(宽度)的划分),以及getoffsetWidth或类似实现的代码。
jsFiddle Demo
宽度:100px-3列(33.333333333%)
jsFiddle Demo
宽度:99px-4列(25%)
一种方法是采用一个列数组和一个父网格,然后遍历每一列和每一列中的每一项,根据父网格的宽度和每个列的剩余部分来改变宽度。
function fluid(grid,columns){
var colCount = columns.length;
var gridWidth = grid.clientWidth;
var colWidth = gridWidth / colCount;
if( parseInt(colWidth,10) === colWidth ){
for(var i = 0; i < colCount; i++){
var col = columns[i];
for(var n = 0; n < col.length; n++){
col[n].style.width = colWidth + "px";
}
}
}else{
var remainder = gridWidth - parseInt(colWidth,10) * colCount;
var added = 0;
for(var i = 0; i < colCount; i++){
var calcWidth;
if( i > 0 && added < remainder ){
added++;
calcWidth = parseInt(colWidth,10)+1 + "px";
}else{
calcWidth = parseInt(colWidth,10) + "px";
}
var col = columns[i];
for(var n = 0; n < col.length; n++){
col[n].style.width = calcWidth;
}
}
}
}
- .scroll()函数在上次更新后在谷歌chrome中定位闪烁
- 如何让JS脚本在导航后继续运行(谷歌chrome控制台)
- 如何知道你右键点击谷歌chrome扩展是什么
- 对齐底部的DIV-谷歌Chrome扩展
- 当我用ctrl+p搜索时,为什么要在谷歌chrome上使用inspect来调试缺少显示文件js
- 从谷歌chrome中的任何网页获取所有tel标签
- 如何缩小我的谷歌chrome扩展's的javascript文件
- 当页面加载时,使谷歌chrome浏览器成为全屏浏览器
- 谷歌Chrome元素仍然存在:即使从光标移开,也要悬停
- 谷歌Chrome Chrome.usb/Chrome.hid锁定设备
- 我的jquery代码在谷歌chrome控制台中工作,而不是在保存它之后
- 谷歌Chrome扩展在用Javascript打开的弹出窗口中工作吗
- 基本的谷歌chrome扩展消息传递不起作用
- 如何操作谷歌chrome's PRINT选项
- 谷歌Chrome在范围滑块禁用时卡住了's的更改功能
- 谷歌Chrome日期选择器事件
- 如何允许在谷歌chrome中通过触摸屏放大和缩小iframe
- 谷歌chrome和FPS的奇怪行为
- 点击时禁用提交按钮,将阻止表单在谷歌Chrome上提交
- AngularJS-谷歌Chrome扩展中的动态链接断开