在页面布局中,常常会用到九宫格布局,如下图所示:

本次我们就以九宫格为基础进行图片的布局操作,首先我们以上面的图片的为例,假设每个格子的大小都相同,将每一个格子相对其父元素进行定位,这样,我们只需要控制每个格子的left和top属性,就可以控制图片的位置了,例如上面序号为4的格子,其left属性值就是每个格子一倍的宽度值,top属性值就是每个格子的一倍高度值,以此为基础,我们将实现下面的效果:

通过用户点击自定义每列显示的个数,来动态控制布局。

首先我们需要在页面中写入基础代码,实现图一的默认显示效果:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title><style>*{margin: 0;padding: 0;list-style: none;}#top{padding: 20px;}#bottom{position: relative;}.box{width: 220px;height: 360px;margin: 0 15px 15px 0;background-color: #e8e8e8;}.box p:last-child{font-size: 13px;color: orangered;}</style>
</head>
<body><div id="top"><button>3列</button><button>4列</button><button>5列</button></div><div id="bottom"><div class="box"><img src="data:image/1.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/2.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/3.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/4.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/5.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/6.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/7.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/8.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/9.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/10.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/11.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/12.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/13.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/14.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/15.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div></div>
</body>
</html>

然后获取相应的标签,监听用户的点击事件,得到每列显示的个数

 //获取需要的标签var btns = document.getElementById("top").children;var bottom = document.getElementById("bottom");var allCols = 1;// 2.监听按钮的点击btns[0].onclick = function () {allCols = 3;};btns[1].onclick = function () {allCols = 4;};btns[2].onclick = function () {allCols = 5;};

第三步,我们需要根据每个盒子的大小和每列显示的个数,依次计算每个盒子的位置:

//根据每个盒子的大小定义变量var boxW = 220, boxH = 360, marginXY = 15;//遍历
for(var i=0; i<bottom.children.length; i++){//求出当前盒子所在的行和列var row = parseInt(i / allCols);var col = parseInt(i % allCols);// console.log("当前盒子在第" + row  + " ,第" + col);//盒子的定位var currentBox = parentNode.children[i];currentBox.style.position = 'absolute';currentBox.style.left = col * (boxW + marginXY) + 'px';currentBox.style.top = row * (boxH + marginXY) + 'px';}

现在,基本功能已经完成,需要将代码进行稍微的整理,完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title><style>*{margin: 0;padding: 0;list-style: none;}#top{padding: 20px;}#bottom{position: relative;}.box{width: 220px;height: 360px;margin: 0 15px 15px 0;background-color: #e8e8e8;}.box p:last-child{font-size: 13px;color: orangered;}</style>
</head>
<body><div id="top"><button>3列</button><button>4列</button><button>5列</button></div><div id="bottom"><div class="box"><img src="data:image/1.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/2.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/3.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/4.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/5.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/6.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/7.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/8.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/9.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/10.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/11.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/12.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/13.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/14.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div><div class="box"><img src="data:image/15.jpg" alt=""><p>因为遇见你</p><p>孙怡邓伦牵手演绎刺绣奇缘</p></div></div>
<script>window.onload = function () {//获取需要的标签var btns = document.getElementById("top").children;var bottom = document.getElementById("bottom");//监听按钮的点击
        btns[0].onclick = function () {j_flex(3, bottom);};btns[1].onclick = function () {j_flex(4, bottom);};btns[2].onclick = function () {j_flex(5, bottom);};function j_flex(allCols, parentNode) {//根据每个盒子的大小定义变量var boxW = 220, boxH = 360, marginXY = 15;//遍历for(var i=0; i<parentNode.children.length; i++){//求出当前盒子所在的行和列var row = parseInt(i / allCols);var col = parseInt(i % allCols);// console.log("当前盒子在第" + row  + " ,第" + col);//盒子的定位var currentBox = parentNode.children[i];currentBox.style.position = 'absolute';currentBox.style.left = col * (boxW + marginXY) + 'px';currentBox.style.top = row * (boxH + marginXY) + 'px';}}}
</script>
</body>
</html>

完整代码下载链接:点这里

转载于:https://www.cnblogs.com/yuyujuan/p/9537458.html

JavaScript之图片操作3相关推荐

  1. 通过JavaScript简单的操作DOM(一)

    通过JavaScript简单的操作DOM (一)简单的前提概念 1.DOM简介 DOM,文档对象模型.描述了HTML和XML文档结构,然后提供API,来帮助开发人员添加.删除.修改页面的某一部分. ( ...

  2. php 自动拉伸图片,实例详解Javascript防止图片拉伸的自适应处理

    相信大家在日常的web开发中,作为前端经常会遇到处理图片拉伸问题的情况.本文主要给大家介绍了关于利用Javascript防止图片拉伸的自适应处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工 ...

  3. JavaScript 实现图片上传前本地预览

    JavaScript 实现图片上传前本地预览 图片上传前预览,应该算是一个普遍的需求,很多时候可能选中的图片并不是想要的那张,所以需要上传前预览下. JS(浏览器中)是一门特殊的语言,它没有直接读写磁 ...

  4. javascript中的操作元素

    操作元素 ​ JavaScript的DOM操作可以改变网页内容,结构和样式,我们可以利用DOM操作元素来改变元素里面的内容.属性等 改变元素内容 element.innerText 从起始位置到种植位 ...

  5. JavaScript的样式操作

    JavaScript的样式操作 样式操作 获取内联样式 getAttribute()方法 DOM对象的style属性 CSSStyleDeclaration对象 获取外联样式表 Document对象的 ...

  6. Javascript核心DOM操作 学习笔记

    DOM .BOM Day01 DOM 1.web APIs和JS基础关联性 1.1 JS的组成 1.2 JS基础阶段以及Web APIs阶段 2.API和Web APIs 2.1 API 2.2 We ...

  7. Javascript Tip(1) 操作剪贴板

    javascript可以轻松操作客户端剪贴板内容,不过只适用IE5以上浏览器 javascript可以使用window.clipboardData对象处理剪贴板内容 保存到剪贴板的方法 setData ...

  8. php 命令执行crud_如何使用原始JavaScript执行CRUD操作

    php 命令执行crud by Zafar Saleem 通过Zafar Saleem 如何使用原始JavaScript执行CRUD操作 (How to perform CRUD operations ...

  9. JavaScript常见集合操作

    JavaScript常见集合操作 集合的遍历 FOR循环(效率最高) 优点:JavaScript最普遍的for循环,执行效率最高 缺点:无法遍历对象 for(let i=0;i<array.le ...

最新文章

  1. vue transition动画
  2. Maven基础知识--Maven资源库详述
  3. linux如何卸载netstat,linux – Netstat -s显示(并且正在增长)“从接收队列中删除的数据包”和“数据包在接收队列中崩溃”...
  4. nmon监控linux内存,使用Nmon监控Linux系统性能
  5. python 垃圾回收机制
  6. 搜狗输入法语音转文字的体验点
  7. vbs按钮传递过程_iOS面试题:事件传递和响应机制
  8. fscanf()函数详解
  9. ThinkPad Win7更改鼠标滚轮设置问题
  10. python技巧:将文件夹下的文件遍历,保留特定文件,删除其他文件
  11. CSS基础(新手入门教程)
  12. 没得选这件事是人生常态
  13. 基于V4L2的视频驱动开发(1)
  14. 一阶系统开环传递函数表达式_机械振动理论(2)-多自由度系统
  15. 【原创】MATLAB汽车制动防抱死模型ABS模型
  16. 抖音巨量服务商入驻流程
  17. vue路由的两种模式:hash与history的区别
  18. 我安装Solaris的全过程。
  19. 使用Dundas Chart控件制作一个模拟的逼真图
  20. php将数组递归,php递归数据到数组

热门文章

  1. Android开发之旅:组件生命周期(二)
  2. .net MySql
  3. 7.28Assignment
  4. java在注解中绑定方法参数的解决方案
  5. Aiiage Camp Day5 A Rikka with Linker
  6. NET_NET深入体验与实战 第一章 .NET你知道 1.1什么是 .NET
  7. HDU 4321 Contest 3
  8. Android EditText属性用法
  9. Silverlight 鼠标与键盘事件注意点
  10. 做好面试前的准备工作