首页 > 其他分享 >JS中的浏览器对象模型-DOM(二)

JS中的浏览器对象模型-DOM(二)

时间:2023-08-02 09:00:57浏览次数:34  
标签:文件 浏览器 DOM ctx JS file path 表单 绘制

表单

在HTML表单中,可以上传文件的唯一控件就是<input type="file">。

当一个表单包含<input type="file">时,表单的enctype必须指定为multipart/form-data,method必须指定为post, 浏览器才能正确编码并以multipart/form-data格式发送表单的数据。

如下面代码所示一个图片展示元素,一个图片信息显示元素,以及一个form表单。form表单包含一个文件上传元素,例如:

  <img id="test-image-preview" style="width:500px;height: 300px;"/>
  <p id="test-file-info"></p>
  <form method="post" enctype="multipart/form-data">
      <input id="test-image-file" type="file" />
  </form>

图片文件上传预览的代码如下:

  var
  fileInput = document.getElementById('test-image-file'),
  info = document.getElementById('test-file-info'),
  preview = document.getElementById('test-image-preview');
  // 监听change事件:
  fileInput.addEventListener('change', function () {
      // 清除背景图片:
      preview.setAttribute("src",null);
      // 检查文件是否选择:
      if (!fileInput.value) {
          info.innerHTML = '没有选择文件';
          return;
      }
      // 获取File引用:
      var file = fileInput.files[0];
      // 获取File信息:
      info.innerHTML = '文件: ' + file.name + '<br>' +
                      '大小: ' + file.size + '<br>' +
                      '修改: ' + file.lastModified;
      if (file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') {
          alert('不是有效的图片文件!');
          return;
      }
      // 读取文件:
      var reader = new FileReader();
      reader.onload = function(e) {
          var
              data = e.target.result; // 'data:image/jpeg;base64,/9j/4AAQSk...(base64编码)...'  
              preview.src  = data;          
      };
      // 以DataURL的形式读取文件:
      reader.readAsDataURL(file);
  });

文件上传对象fileInput,它的files属性返回的是一个文件数组。上传的第一个文件是fileInput.files[0]。

使用FileReader对象读取文件,将读取结果赋值给img的src属性。

绘图

Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表、动画等。

一个Canvas定义了一个指定尺寸的矩形框,在这个范围内我们可以随意绘制:

 <canvas id="test-canvas" width="300" height="200"></canvas>

生成画图环境

  canvas = document.getElementById('test-canvas');
  var ctx = canvas.getContext('2d');
  ctx.clearRect(0, 0, 200, 200); // 擦除(0,0)位置大小为200x200的矩形,擦除的意思是把该区域变为透明
  ctx.fillStyle = '#dddddd'; // 设置颜色
  ctx.fillRect(10, 10, 130, 130); // 把(10,10)位置大小为130x130的矩形涂色

上述代码中的ctx是一个绘图环境。通过绘图环境,设置绘图区域,绘制颜色,绘制矩形区域。

在绘图环境中,还可以利用path绘制复杂路径

  // 利用Path绘制复杂路径:
  var path=new Path2D();
  path.arc(75, 75, 50, 0, Math.PI*2, true);
  path.moveTo(110,75);
  path.arc(75, 75, 35, 0, Math.PI, false);
  path.moveTo(65, 65);
  path.arc(60, 65, 5, 0, Math.PI*2, true);
  path.moveTo(95, 65);
  path.arc(90, 65, 5, 0, Math.PI*2, true);
  ctx.strokeStyle = '#ee00ff';   //路径颜色
  ctx.stroke(path);     //绘制路径

绘制文本

  ctx.shadowOffsetX = 2;
  ctx.shadowOffsetY = 2;
  ctx.shadowBlur = 2;
  ctx.shadowColor = '#666666';
  ctx.font = '24px Arial';
  ctx.fillStyle = '#333333';
  ctx.fillText('带阴影的文字', 150, 40);

 文章同时发表在:码农编程网 欢迎访问

本节重点:

  • 表单的文件类型;
  • 文件的读取、使用;
  • 创建画布,获取绘制环境;
  • 利用绘制环境,通过path对象可以绘制复杂路径;
  • 利用绘制环境,绘制文本。

标签:文件,浏览器,DOM,ctx,JS,file,path,表单,绘制
From: https://www.cnblogs.com/qqxz/p/17560097.html

相关文章

  • [8月摸鱼计划] win7下安装nodejs
    win7下安装nodejs16.4.0参考:https://blog.csdn.net/weixin_43211696/article/details/1183460331、nodejs下载地址:https://nodejs.org/dist/v13.9.0/https://nodejs.org/dist/latest-v16.x/2、通过以上路径,分别下载下面资源包:node-v13.9.0-x64.msinode-v16.14.0-win-x64.zip3、双击......
  • Wetab 标签页:内置多种免费实用优雅小组件的浏览器主页和起始页
    Wetab是什么?Wetab是一款基于浏览器的新标签页产品,主张辅助用户打造一个兼具效率与美观的主页。 Wetab的核心特色便是内置了多种实用、优雅的小组件。今天这篇,主要按照分类详细介绍 Wetab中的各个小组件的功能及使用示范。Wetab内置了多种小组件,包括AI小组件、日历、待办、......
  • JPA实体类映射PostgreSQL中的jsonb字段
    前言有时候我们需要在PostgreSQL表中存储jsonb类型的数据,JPA实体类中如何定义这个属性与之对应呢?本篇介绍两种方式:①自定义数据库方言和自定义类型②引入hibernate-types依赖方式一自定义数据库方言和自定义类型自定义方言publicclassCustomPostgreSqlDialect......
  • Wetab 标签页:内置多种免费实用优雅小组件的浏览器主页和起始页
    Wetab是什么?Wetab是一款基于浏览器的新标签页产品,主张辅助用户打造一个兼具效率与美观的主页。 Wetab的核心特色便是内置了多种实用、优雅的小组件。今天这篇,主要按照分类详细介绍 Wetab中的各个小组件的功能及使用示范。Wetab内置了多种小组件,包括AI小组件、日历、待......
  • Gin+Xterm.js实现远程Kubernetes Pod(一)
    Xterm.js简介xterm.js(https://xtermjs.org/)是一个开源的JavaScript库,它模拟了一个终端接口,可以在网页中嵌入一个完全功能的终端。这个库非常灵活,并且具有很多定制选项和插件系统。下面是一些使用xterm.js的基本步骤:首先,需要在项目中安装xterm.js。你可以直接从npm......
  • 基于NodeJS电子商城管理系统
    随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化、网络化和电子化。电子商城,它将是直接市场营销的最新形式。本论文是以构建电子商城管理系统为目标,使用Node.js制作,由前台和后台两大部分组成。着重论述了系统设计分析,系统的实现包括前台:......
  • Wetab新标签页:内置实用小组件的浏览器扩展,重新定义浏览器主页
    除了社交媒体,浏览器可能是我们日常工作、学习和生活中最常用的平台之一。然而,在使用浏览器的过程中,我们经常被书签管理、标签管理等问题所困扰。例如,书签栏混乱不堪,无法快速查找到所需书签。为了和浏览器OS 高效互动,我们需要一个简单、好用、好看的工具,帮助我们提升使用浏览器的......
  • 21 os/sys/json/subprocess模块
    os模块使用前老规矩:加上importos1.创建目录(文件夹)makedirsos.mkdir(r'aaa')#在os所在的路径下创建一个aaa文件夹(只能创建一个单级目录)os.makedir((r'ccc')os.makedirs(r'bbb/ccc/ddd')#makedirs支持创建多级目录2.删除目录(文件夹)removediros.rmdir(r'aaa')#可......
  • 最新中国地区各种数据大全如JSON、CSV等
    ✍️作者简介:沫小北(专注于Android、Web、TCP/IP等技术方向)......
  • Json格式的数据获取,电商API接口获取商品详情
    为了进行淘宝的API开发,首先我们需要做下面几件事情。1)开发者注册一个账号注册链接2)然后为每个淘宝应用注册一个应用程序键(AppKey)。3)下载淘宝API的SDK并掌握基本的API基础知识和调用4)利用SDK接口和对象,传入AppKey或者必要的时候获取并传入SessionKey来进行程序开......