主要用到的核心东西就是html5的canvas功能,利用js来实现画图和一系列的操作

1.首先,定义一个画布 并添加了一个单击事件

<body>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td align="right">
<div class="pw_box_div" οnclick="clickCanvas(this,event)" style="margin-left: auto;margin-right: auto;" > //屏幕单击事件
<canvas id="myCanvas" style="margin-left: auto;margin-right: auto;" width="870px" height="610px"></canvas> //定义一个画布
</div>
</td>
</tr>
</table>
</table>
</body>

这样就有了画布,然后对画布展开操作

2、先来画个图玩

首先定义了一个结构体,规定下 每个图片的长宽高,间距,开始x,y

var MyConstants = {
PicWidth : 75,
PicHeight : 75,
PicMargin : 5, //每个图片之间的距离
PicRows :7,
PicCols :10,
BeginX :10, //开始画图的x坐标
BeginY :10, //开始画图的y坐标
}

window.οnlοad=function(){  //一打开网页就加载
var currCanvas = document.getElementById('myCanvas'); //得到画布 
gContext = currCanvas.getContext('2d');//得到对象 固定格式

//记录画布相对父元素的位置
nCurrCanvasTop =currCanvas.offsetTop; //得到当前位置的左上角
nCurrCanvasLeft =currCanvas.offsetLeft; //得到当前位置的左上角
nCurrCanvasWidth=currCanvas.width;
nCurrCanvasHeight=currCanvas.height;
//alert(nCurrCanvasTop+" "+nCurrCanvasLeft+" "+nCurrCanvasWidth+" "+nCurrCanvasHeight+" "+gContext);
init(gContext);

}

function init(_context){
var nCurrX = MyConstants.BeginX;//开始绘画的坐标
var nCurrY = MyConstants.BeginY;
//初始化数组
for(var i=0;i<allPicsArray.length;i++){ //先把一个个框都弄成数组,方便后面计算
var colArray= new Array(MyConstants.picCols);
allPicsArray[i]=colArray;
}
backPictures();// 这就是重点 画个图

}

function backPictures(){
var nCurrX = MyConstants.BeginX;//开始绘画的坐标
var nCurrY = MyConstants.BeginY;
var picbeginX;
var picbeginY;
var picendX;
var picendY;
for(var i=0; i<MyConstants.PicCols; i++){

for(var j=0; j<MyConstants.PicRows; j++){
//构造当前图片的信息
picbeginX=MyConstants.BeginX+i*(MyConstants.PicWidth+MyConstants.PicMargin);  //数学问题,其实就是从左上角开始一个个定义好一个个图标的起点坐标
picbeginY=MyConstants.BeginY+j*(MyConstants.PicHeight+MyConstants.PicMargin);
picendX=picbeginX+MyConstants.PicWidth;
picendY=MyConstants.BeginY+MyConstants.PicHeight;

//alert("picbeginX=" + picbeginX + ",picbeginY=" + picbeginY + ",picendX=" + picendX + ",picendY=" + picendY);
//var grd=gContext.createLinearGradient(picbeginX,picbeginY,picendX,picendY);

/// 这里实现了一个渐变的效果,从左上角到右下角的渐变
var grd=gContext.createLinearGradient(0,0,870,610);         
grd.addColorStop(0,"#FF00FF");
grd.addColorStop(1,"#00FF00");
gContext.fillStyle=grd;
gContext.fillRect(picbeginX,picbeginY,MyConstants.PicWidth,MyConstants.PicHeight);
/// 这里实现了一个渐变的效果,从左上角到右下角的渐变
}

}
}

效果如下

3.这是画的,连连看当然不能用这么丑的,我们来本地加载点
html增加:

var img=new Image();//图片预加载 否则显示不出来
img.src="1.jpg"; //加载本地一个图片,这里刚开始我写在onload的js里面,然后一直发现无法实现,查了半小时,问题出在 这几行一定要写在外面 进行预加载

js增加:

gContext.drawImage(img,picbeginX,picbeginY);  也就是那几行画图的替换成这个 这样就能正确的显示图片了,效果如图

接下来就是进行一个个对象构建了

待解决:画布居中问题。。。。

转载于:https://www.cnblogs.com/tester-huang/p/4762500.html

HTML5 从0开始 写连连看 第一集. 背景图 表格绘制相关推荐

  1. html设置%3cbody%3e背景颜色,使用css写带纹理渐变背景图的示例代码

    项目中页面长度大概在2000px以上,再加上背景图是带纹理和渐变的,所以加载起来会很大很耗费时间,所以就改用css实现了. 这个网站中有很多现成的背景,也可以自定义背景色,纹样的颜色和透明度. 网站中 ...

  2. 使用css写带纹理渐变背景图

    项目中页面长度大概在2000px以上,再加上背景图是带纹理和渐变的,所以加载起来会很大很耗费时间,所以就改用css实现了. 这次我们主要用到的网站是Hero Patterns--免费在线纹理素材库 这 ...

  3. 跟我一起学jQuery——第一集

    <锋利的JQuery>第二版阅读笔记-第一章 跟我一起学jQuery--第一集 jQuery对象和DOM对象 jQuery的优势与特点 Hello World! jQuery对象和DOM对 ...

  4. Ada 程序设计语言(The Ada Programming Language)[第一集]

    Ada 程序设计语言(The Ada Programming Language)[第一集]- - 版权(Copyright) <Ada 程序设计语言>的版权隶属于网站 VenusIC,允许 ...

  5. 看萧井陌b站直播第一集的收获,附代码

    看了萧井陌在b站直播的录播第一集,收获颇大,遂记录一下: 直播中使用的语言是JavaScript,我之前学web后台的时候,对js有一个简单的了解,因为学过C++和Java,所以看录播的时候虽然有些语 ...

  6. 红薯微剧场 | 开源众包发包记第一集 —— 前端篇

     开源众包发包记 ---玩转众包 第一集   巧引外援.顺度难关---前端开发项目篇 丁酉年11月,北京的天气已经逐渐寒凉,部分办公司的灯光已熄灭,办公室的窗户上印衬着佳佳略显倦怠的容颜.虽然小风 ...

  7. 【深入理解 android telephony 系列第一集 初识telephony】

    深入理解 android telephony 深入理解 android telephony 系列第一集 初识telephony 1. 概述 2. Android Telephony 框架 3. And ...

  8. 《并发与高并发系列第一集-基础与概念》

    面试官:看你简历上写,最近正在写并发编程方面的博客,是吧? 安琪拉:闲来无事,看看闲书,写写段子,承蒙读者厚爱,有此打算. 面试官:少跟我这拽文,"闲来无事"?阿里不用996吗? ...

  9. 从0开始写一个播放器系列-开篇

    从0开始写一个播放器系列-开篇 阅读本系列博客所需要具备的知识: js, ts , canvas Api , DOM, webpack, 不懂也没有太大的关系, 我会捎带着写出来, 剩下的自行百度 第 ...

最新文章

  1. WMI技术介绍和应用——事件通知
  2. 25岁后,拉开你和同龄人差距的,不是出身,不是努力,而是……
  3. Azure 静态 web 应用集成 Azure 函数 API
  4. 谓词::不适合Java
  5. vijos1196|吃糖果游戏|博弈论
  6. AI 专业人才缺口上百万,年薪 80 万远超同行
  7. Google Pixel 2拍照黑科技:单摄搞定背景虚化+内部潜伏神秘芯片
  8. 【一题多解】Python 字符串逆序
  9. 修改键盘映射、交换按键
  10. java程序员如何编写出优美的代码-java编程规范
  11. 腾讯云短信服务php发送短信
  12. 全角半角英文字母及符号
  13. 2022第四届中国制造业数字化转型国际峰会
  14. ubuntu16.04,exFAT格式U盘无法打开,离线解决方式
  15. select函数用法详解
  16. 为什么敲了许多年的代码,却仍然在原地踏步?| 程序员有话说
  17. IDEA 新UI使用
  18. 人群计数之生成密度图
  19. 【评价指标】如何计算模型评估中的AUC和AUPR值
  20. 固定电话的正则表达式

热门文章

  1. 订单可视化(智能制造、流程再造、企业信息化) 第七篇 经营班子掌舵,业务与开发分离,走向成功必备条件...
  2. Spring WS Consume Soap Service From WSDL
  3. linux实用的日志分析脚本
  4. Web.Config的学习
  5. LuaTinker向Linux移植成功
  6. Android系统启动过程
  7. android-- dp px sp长度单位的区别
  8. 哈夫曼树【最优二叉树】【Huffman】
  9. react 项目实战(二)创建 用户添加 页面 及 fetch请求 json-server db.json -w -p 8000...
  10. C#判断当前运行环境是否64bit