iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >HTML5中如何解决canvas元素引领下一代web页面的问题
  • 563
分享到

HTML5中如何解决canvas元素引领下一代web页面的问题

2024-04-02 19:04:59 563人浏览 安东尼
摘要

HTML5中如何解决canvas元素引领下一代WEB页面的问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 初识

HTML5中如何解决canvas元素引领下一代WEB页面的问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

初识canvas元素

html5新增了一个元素canvas,用于绘图使用,其实它的表现和div比较接近(其实他应该属于inline-block),而提供了许多接口,从而轻易的绘制矩形框、园三角形等

PS:关于HTML5新增元素

经过最近两天的学习,和以前对HTML5的认知,我认为HTML5其实还是HTML4,两者之间没多大的区别,无非是增加了点新东西。
我认为HTML5为我们带来的真正意义是:我们可以用javascript做更多的事情了;我们可以用javascript实现更好的产品了。比如HTML5就解决了我们头疼的跨域问题、实时通信api、与现在的canvas之所以HTML5叫HTML5,我认为他是划时代的,比如他让我们用网页开发游戏变成可能;比如他让电脑桌面只剩IE不在是传说(过于夸张)

绘制矩形框

直入正题,我们来绘制一个矩形框看看,这里提供一个颜色选择器用于方便的选择颜色,PS:现在不用Jquery编程感觉真麻烦。。。

 问题:定义样式与定义height与width

 一来就遇到了问题,我这里先来截个图:

代码如下:


<!DOCTYPE html>
<html xmlns="Http://www.w3.org/1999/xhtml">
<head>
   <title></title>
   <script type="text/javascript">
       function draw() {
           //获取canvas对象
           var canvas =  document.getElementById('canvas');
           if (canvas == null) {
               return false;
           }
           var context = canvas.getContext('2d');
           context.fillStyle = '#99d9ea';
           context.fillRect(0, 0, 300, 200); //填充画布结束
 
           context.strokeStyle = 'red';
           context.fillStyle = 'gray';
           context.lineWidth = 1;
           context.fillRect(10, 10, 100, 100);
           context.strokeRect(10, 10, 100, 100);
 
           context.clearRect(20, 20, 20, 20);
       }
   </script>
</head>
<body>
   <canvas id="canvas" width=300 height="200" >
   </canvas>
   

   <button onclick="draw();">
       绘制矩形</button>
   <input type="color" />
</body>
</html>

  各位情况canvas元素,图一位设置width与height的情况,图二十用style指定的情况:

HTML5中如何解决canvas元素引领下一代web页面的问题

可以看到,对于canvas来说,还是老老实实定义高宽的好,别去傻乎乎的用样式了,当然这个问题需要实际研究才能得出最终结论。

好了,现在我们再来看看绘制矩形这个方法:

PS:其实,使用该方法这么麻烦,完全可以将该函数封装下下,使用便会简单许多
1、使用getElementById方法获取绘制对象2、取得上下文getContext('2d'),这都是固定的写法3、指定填充的颜色fillStyle和绘制的颜色strokeStyle,即里面的颜色和边框的颜色4、指定线宽linewidth6、填充/绘制 fillRect/strokeRect 参数为 x,y,width,height6、若是要使其中一块透明,使用clearRect

至此,绘制矩形框便暂时告一段落。

绘制圆形

现在我们来绘制圆形,这个说起绘制圆形,其实我原来用js好像写过一个,这里也贴出来看看:

代码如下:


我是纯js画的圆
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <style type="text/CSS">
        div
        {
            position: absolute;
            width: 1px;
            height: 1px;
            line-height: 1px;
        }
    </style>
    <script src="http://www.cnblogs.com/jquery-1.7.1.js" type="text/javascript"></script>
    <script type="text/javascript">
        //x2 + y2 = r2;
        $(document).ready(function () {
            //先画x,y
            var box = $('#box');
            var NUM = 200;
            var R = NUM / 2;
            var RR = R * R;
            for (var i = 0; i <= NUM; i = i + 6) {
                //var divX = $('<div >*</div>')
                // var divY = $('<div >*</div>')

                var ti = i;
                //sqrt(x)
                if (ti > R) {
                    ti = ti - R;
                    var ty = Math.sqrt((RR - ti * ti));
                    var y = $('<div >*</div>')
                    var y1 = $('<div >*</div>')
                    box.append(y);
                    box.append(y1);
                } else if (ti < R) {
                    ti = R - ti;
                    var ty = Math.sqrt((RR - ti * ti));
                    var y = $('<div >*</div>')
                    var y1 = $('<div >*</div>')
                    box.append(y);
                    box.append(y1);
                }
                //box.append(divX);
                //box.append(divY);
            }

            for (var i = 0; i <= NUM; i = i + 6) {
                //var divX = $('<div >*</div>')
                // var divY = $('<div >*</div>')
                var ti = i;
                //sqrt(x)
                if (ti > R) {
                    ti = ti - R;
                    var ty = Math.sqrt((RR - ti * ti));
                    var y = $('<div >*</div>')
                    var y1 = $('<div >*</div>')
                    box.append(y);
                    box.append(y1);
                } else if (ti < R) {
                    ti = R - ti;
                    var ty = Math.sqrt((RR - ti * ti));
                    var y = $('<div >*</div>')
                    var y1 = $('<div >*</div>')
                    box.append(y);
                    box.append(y1);
                }
            }
        });
   
    </script>
</head>
<body>
    <div id="box" >
    </div>
</body>
</html>

HTML5中如何解决canvas元素引领下一代web页面的问题

话说,他还是比较圆的说。。。

进入正题

说起画圆、正弦图等肯定会经过一定计算的,所以稍稍复杂点:

① 创建路径

② 创建图形路径

③ 路径创建完成后关闭路径

④ 设定绘制样式调用方法绘制之

代码如下:


我是一个圆
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript">
        function draw() {
            //获取canvas对象
            var canvas = document.getElementById('canvas');
            if (canvas == null) {
                return false;
            }
            var context = canvas.getContext('2d');
            context.fillStyle = '#99d9ea';
            context.fillRect(0, 0, 300, 200); //填充画布结束
            for (var i = 0; i < 5; i++) {
                context.beginPath();
                context.arc(i * 25, i * 25, i * 10, 0, Math.PI * 2, true);
                context.closePath();
                context.strokeStyle = 'red';
                context.fill();
            }
        }
    </script>
</head>
<body>
    <canvas id="canvas" width="300" height="200" >
    </canvas>
   
    <button onclick="draw();">
        绘制圆</button>
    <input type="color" />
</body>
</html>

HTML5中如何解决canvas元素引领下一代web页面的问题

我们来看看绘制圆过程中其它地方都没有问题,但是创建圆路径这块值得考虑:

arc方法参数很多,依次是:xy半径开始弧度(我们一般喜欢角度,所以要转换)结束弧度顺时针或者逆时针true为顺时针
其它都好说,主要这个开始角度和结束角度我们来研究下,因为开始我没搞懂,但后来我发现他其实很简单了。。。就是开始的角度和结束的角度嘛,和我们高中学的知识一样的,只不过单位换算Math.PI/180为一度。。。。
反正还是没说清楚,对了,记得我们高中画圆的除了圆规和一个计量三角形角度的半圆直尺了吗,我要说的角度就是那个。。。太坑爹了!
好像最右边是0度,垂直是90度,水平是180度,既然如此,我们再来看看

看完上述内容,你们掌握HTML5中如何解决canvas元素引领下一代web页面的问题的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网html频道,感谢各位的阅读!

--结束END--

本文标题: HTML5中如何解决canvas元素引领下一代web页面的问题

本文链接: https://www.lsjlt.com/news/82835.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • HTML5中如何解决canvas元素引领下一代web页面的问题
    HTML5中如何解决canvas元素引领下一代web页面的问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 初识...
    99+
    2024-04-02
  • 如何解决移动端Html5页面中1px边框的问题
    这篇文章将为大家详细讲解有关如何解决移动端Html5页面中1px边框的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题提出这是一个比较老的问题了,我第一次注意到的时候,是UI设计师来找我麻烦,emm...
    99+
    2023-06-09
  • 如何解决HTML5手机端页面缩放的问题
    小编给大家分享一下如何解决HTML5手机端页面缩放的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!通常在写HTML5手机端页...
    99+
    2024-04-02
  • 如何解决HTML5中垂直上下居中的问题
    小编给大家分享一下如何解决HTML5中垂直上下居中的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在CSS中,则要吐槽一下,利用margin:0 auto;可以达到水平方向的居中,但是...
    99+
    2024-04-02
  • 如何解决springmvc直接不经过controller访问WEB-INF中的页面问题
    小编给大家分享一下如何解决springmvc直接不经过controller访问WEB-INF中的页面问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!不经过controller访问WEB-INF的页面在springDisp...
    99+
    2023-06-29
  • 如何解决angularjs跨页面传参遇到的一些问题
    小编给大家分享一下如何解决angularjs跨页面传参遇到的一些问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在app.js下添加 params:{'args':{}}...
    99+
    2024-04-02
  • 如何解决CSS中子元素z-index与父元素兄弟节点的层级问题
    这篇文章主要介绍了如何解决CSS中子元素z-index与父元素兄弟节点的层级问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.问题的出现写了一个平铺的列表,其中有些列表项...
    99+
    2023-06-08
  • css中如何解决绝对定位元素被遮挡的问题
    这篇文章主要介绍css中如何解决绝对定位元素被遮挡的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体方法如下:ie7下绝对定位元素即使z-index值很高,如果其设置相对定位的...
    99+
    2024-04-02
  • 如何解决MySQL中一个双引号的错位问题
    这篇文章主要讲解了“如何解决MySQL中一个双引号的错位问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决MySQL中一个双引号的错位问题”吧!&n...
    99+
    2024-04-02
  • 如何解决MySQL中因一个双引号错位引发的问题
    小编给大家分享一下如何解决MySQL中因一个双引号错位引发的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言最近经常碰...
    99+
    2024-04-02
  • 如何解决vue单页面在微信下只能分享落地页的问题
    这篇文章主要介绍如何解决vue单页面在微信下只能分享落地页的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实际上关键词叫 微信pushState只能分享落地页 更贴切一点应用场景...
    99+
    2024-04-02
  • 在不使用ssr的情况下如何解决Vue单页面SEO问题
    这篇文章主要介绍在不使用ssr的情况下如何解决Vue单页面SEO问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!遇到的问题:近来在写个人博客的时候遇到了大家可能都会遇到的问题Vue...
    99+
    2024-04-02
  • 如何解决angularjs中路由页面强制更新的问题
    这篇文章给大家分享的是有关如何解决angularjs中路由页面强制更新的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。有这么一个问题,在页面内路由页面跳转时,第一次跳入路由页...
    99+
    2024-04-02
  • web开发中如何解决移动端设置了overflow:hidden页面还会滚动的问题
    这篇文章主要为大家展示了“web开发中如何解决移动端设置了overflow:hidden页面还会滚动的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web开...
    99+
    2024-04-02
  • 如何解决绝对定位的元素在ie6下不显示隐藏了的问题
    本篇内容主要讲解“如何解决绝对定位的元素在ie6下不显示隐藏了的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决绝对定位的元素在ie6下不显示隐藏了的...
    99+
    2024-04-02
  • 如何解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
    这篇文章主要介绍了如何解决IOS端微信H5页面软键盘弹起后页面下方留白的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。最近微信和ios都...
    99+
    2024-04-02
  • 如何解决IE7下在DD DT中插入a元素结果列表显示逐级向左的问题
    如何解决IE7下在DD DT中插入a元素结果列表显示逐级向左的问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 ...
    99+
    2024-04-02
  • 如何解决页面中marquee与flash同时存在时的冲突问题
    这篇文章主要为大家展示了“如何解决页面中marquee与flash同时存在时的冲突问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决页面中marquee与flash同时存在时的冲突问题”...
    99+
    2023-06-08
  • 如何解决Vue 2.0在IE11中打开项目页面空白的问题
    这篇文章主要介绍如何解决Vue 2.0在IE11中打开项目页面空白的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言因为工作的需要,学习Vue2.0也有一段时间,最近在用Vue...
    99+
    2024-04-02
  • 如何解决页面在360浏览器下显示不正常的兼容性问题
    这篇文章主要介绍“如何解决页面在360浏览器下显示不正常的兼容性问题”,在日常操作中,相信很多人在如何解决页面在360浏览器下显示不正常的兼容性问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作