网站建设的重要性 学校云服务器怎么发布网站

pingmian/2026/1/25 5:47:42/文章来源:
网站建设的重要性 学校,云服务器怎么发布网站,网站制作售后,郑州市网络设计公司目录 需求实现讲解工具 - 图片旋转、base64 转换为 file 对象组件封装组件全局注册组件使用效果展示 需求 移动端需要实现手机横屏手写签名并上传签名图片功能。 实现讲解 vue-esign 插件文档地址 https://www.npmjs.com/package/vue-esign SignCanvas 组件封装原理#xff1a… 目录 需求实现讲解工具 - 图片旋转、base64 转换为 file 对象组件封装组件全局注册组件使用效果展示 需求 移动端需要实现手机横屏手写签名并上传签名图片功能。 实现讲解 vue-esign 插件文档地址 https://www.npmjs.com/package/vue-esign SignCanvas 组件封装原理 页面分为左右两部分左-按钮区域右-签名区域按钮区域将按钮进行旋转视觉上制造手机横屏的效果签名区域由于是横屏签名所以在签名结束提交签名时需要将签名图片进行逆时针90°旋转 工具 - 图片旋转、base64 转换为 file 对象 /utils/index /*** 图片旋转*/ export function rotateBase64Img(src, edg, fileName, fileType, callback) {var canvas document.createElement(canvas)var ctx canvas.getContext(2d)var imgW // 图片宽度var imgH // 图片高度var size // canvas初始大小if (edg % 90 ! 0) {console.error(旋转角度必须是90的倍数!)return 旋转角度必须是90的倍数!}edg 0 (edg (edg % 360) 360)const quadrant (edg / 90) % 4 // 旋转象限const cutCoor { sx: 0, sy: 0, ex: 0, ey: 0 } // 裁剪坐标var image new Image()image.crossOrigin Anonymousimage.src srcimage.onload () {imgW image.widthimgH image.heightsize imgW imgH ? imgW : imgHcanvas.width size * 2canvas.height size * 2switch (quadrant) {case 0:cutCoor.sx sizecutCoor.sy sizecutCoor.ex size imgWcutCoor.ey size imgHbreakcase 1:cutCoor.sx size - imgHcutCoor.sy sizecutCoor.ex sizecutCoor.ey size imgWbreakcase 2:cutCoor.sx size - imgWcutCoor.sy size - imgHcutCoor.ex sizecutCoor.ey sizebreakcase 3:cutCoor.sx sizecutCoor.sy size - imgWcutCoor.ex size imgHcutCoor.ey size imgWbreak}ctx.translate(size, size)ctx.rotate((edg * Math.PI) / 180)ctx.drawImage(image, 0, 0)var imgData ctx.getImageData(cutCoor.sx, cutCoor.sy, cutCoor.ex, cutCoor.ey)if (quadrant % 2 0) {canvas.width imgWcanvas.height imgH} else {canvas.width imgHcanvas.height imgW}ctx.putImageData(imgData, 0, 0)callback(dataURLtoFile(canvas.toDataURL(), fileName, fileType))// callback(canvas.toDataURL())} } /*** 将 base64 转换为 file 对象* dataURLbase64 格式* fileName文件名* fileType文件格式*/ export function dataURLtoFile(dataURL, fileName, fileType) {const arr dataURL.split(,)const mime arr[0].match(/:(.*?);/)[1]const bstr atob(arr[1])let n bstr.lengthconst u8arr new Uint8Array(n)while (n--) {u8arr[n] bstr.charCodeAt(n)}return new File([u8arr], fileName, { type: fileType || image/jpg }) }组件封装 /components/SignCanvas.vue !-- 签名组件 -- templatediv classsignContainerdiv classbtnsvan-button typedefault round clickresetHandler classreset重签/van-buttonvan-button typeinfo round clicksureHandler确认/van-button/divvue-esignrefVueEsignRefclassvue-esign:widthwidth:heightheight:lineWidthlineWidth:lineColorlineColor:bgColorbgColor:isCropisCrop:isClearBgColorisClearBgColor:formatformat:qualityquality/div :style{ --width: height px } classtipText请span v-ifsignName{{ ${signName} }}/span在此区域内签名/div/div /templatescript import { rotateBase64Img } from /utils/indexexport default {name: SignCanvas,components: {},props: {// 画布宽度即导出图片的宽度width: {type: Number,default: () {const dom document.querySelector(#app)const width dom dom.offsetWidthreturn width ? width - 60 : 300 // 减去按钮区域的宽度}},// 画布高度即导出图片的高度height: {type: Number,default: () {const dom document.querySelector(#app)return (dom dom.offsetHeight) || 800}},// 画笔粗细lineWidth: {type: Number,default: 6},// 画笔颜色lineColor: {type: String,default: #000},// 画布背景色为空时画布背景透明支持多种格式 #ccc#E5A1A1rgb(229, 161, 161)rgba(0,0,0,.6)redbgColor: {type: String,default: },// 是否裁剪在画布设定尺寸基础上裁掉四周空白部分isCrop: {type: Boolean,default: false},// 清空画布时(reset)是否同时清空设置的背景色(bgColor)isClearBgColor: {type: Boolean,default: true},// 生成图片格式 image/jpeg(jpg格式下生成的图片透明背景会变黑色请慎用或指定背景色)、 image/webpformat: {type: String,default: image/png},// 生成图片质量在指定图片格式为 image/jpeg 或 image/webp的情况下可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围将会使用默认值 0.92。其他参数会被忽略。quality: {type: Number,default: 1},// 未签名时提示信息noSignTipText: {type: String,default: 请确保已签名},// 需要签名的姓名signName: {type: String,default: }},methods: {resetHandler() {this.$refs.VueEsignRef.reset() // 清空画布},sureHandler() {// 可选配置参数 在未设置format或quality属性时可在生成图片时配置 例如 {format:image/jpeg, quality: 0.5}// this.$refs.esign.generate({format:image/jpeg, quality: 0.5})this.$refs.VueEsignRef.generate().then(res {/*** resbase64图片*/rotateBase64Img(res, 270, ${this.signName ? this.signName -签名.jpg : sign.jpg}, , data {this.$emit(sureHandler, data)})}).catch(err {console.log(err----, err)this.$dialog.alert({message: this.noSignTipText})})}} } /scriptstyle langscss scoped .signContainer {width: 100%;height: 100vh;display: flex;background-color: #fff;.btns {width: 55px;background-color: #f8f8f8;display: flex;flex-direction: column;justify-content: center;.reset {margin-bottom: 70px;}}.vue-esign {z-index: 2;}.tipText {position: absolute;top: 50%;width: var(--width);left: calc(50% 55px);transform: translateX(-50%) translateY(-50%) rotateZ(90deg);text-align: center;color: #ddd;letter-spacing: 2px;} } ::v-deep .van-button {width: 85px !important;height: 35px;transform: rotate(90deg) translateY(15px);text-align: center;.van-button__text {letter-spacing: 5px;} } /style 组件全局注册 main.js import vueEsign from vue-esign // 需要 npm 包下载 npm install vue-esign Vue.use(vueEsign)import SignCanvas from /components/SignCanvas Vue.component(SignCanvas, SignCanvas) // ...组件使用 !-- XXXX签名 -- templateSignCanvas refSignCanvasRef :signNamenameList[nameIndex] sureHandlersureSignHandler / /templatescript export default {name: BloodRegisterSign,components: {},data() {return {// ...inputData: {}, // 该数据中 cxmjView 为需要签名的人员姓名nameIndex: 0, // 当前签名为第几个人签名signFileList: [] // 签名图片列表}},computed: {nameList() {return this.inputData.cxmjView ? this.inputData.cxmjView.split(,) : [] // 需要有多个签名}},watch: {},created() {console.log(this.$route----, this.$route)this.inputData JSON.parse(this.$route.query.inputData || {})// ...},methods: {sureSignHandler(data) {this.signFileList.push(data)if (this.nameIndex this.nameList.length - 1) {this.nameIndexthis.$refs.SignCanvasRef.resetHandler()} else {this.submitHandler()}},submitHandler() {// TODO调用接口提交签名图片等数据}} } /scriptstyle langscss scoped /style 效果展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/85958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设0基础注册城乡规划师考试时间

RAW是指未经过任何压缩或处理的原始图像数据。在摄像头中,原始图像数据可以是来自图像传感器的未经处理的像素值。这些原始数据通常以一种Bayer模式的形式存在,其中每个像素仅包含一种颜色信息(红色、绿色或蓝色),需要…

霸州做阿里巴巴网站设计方案步骤

概念 什么是逻辑删除 逻辑删除:假删除。将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录。 数据库实现思路:插入数据时,标记为未删除状态;查询、修改时,只获取未删除状态的数据进行操作;删除时则更新删除状态为已删除…

南油网站建设沈阳专业网站制作

1.最简单的路由配置 URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行。 1.1 例1: 第一步:在…

重庆网站建设接重庆零臻科技大庆建设网站首页

如何解决Oracle数据库游标连接超出问题发布时间:2020-07-21 10:57:35来源:亿速云阅读:103作者:小猪这篇文章主要讲解了如何解决Oracle数据库游标连接超出问题,内容清晰明了,对此有兴趣的小伙伴可以学习一下…

宣城市市政建设集团公司网站执行信息公开网

来源:雷锋网作者 | 付静1 代表着首次,标志着政府与企业持续合作前往国际空间站的开始。终于,美国太空探索技术公司(SpaceX)的首次正式载人飞行任务拉开大幕!美东时间 2020 年 11 月 15 日 19 时 27 分&…

合肥网站优化选哪家北京网站建设哪里好

文章目录 前言 1 用于ESP32的DroneBridge 2 推荐的硬件 3 下载和烧录固件 4 为ESP32配置DroneBridge 前言 ESP32 是现成的 Wi-Fi 模块,具有完整的 TCP/IP 协议栈和微控制器功能。它们提供专用的 UART、SPI 和 I2C 接口。它们可与任何 ArduPilot 自动驾驶控制器…

网站服务器的DNs怎么查安徽设计公司排名

引言具体不记得是在群里还是什么地方有人问过,.NETCore有没有汉化包,答案是有,目前微软已经为我们提供了.NETCore多种语言的语言包。下面看看如何安装与使用吧。本文介绍:如何安装这些下载的本地化版本。如何修改Visual Studio安装…

网站建设的要点是什么意思阿里云营销网站建设

今日新学了几个基础操作,觉得很有意思,分享给大家。不过真心觉得,有些操作当时学会了,长时间不用,转眼就忘了;另一方面,如果购买相关课程,学着也没什么意思,我前段时间买…

报考建设八大员官方网站常熟做网站多少钱

随着数字农业和智慧农业的发展,基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…

江苏建设造价信息网站网站建设课程报告论文

文章目录 三、桥接模式 三、桥接模式 桥接模式(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类…

做商城网站哪里好设计制作活动记录表

数据分析与决策技术丛书 R语言数据挖掘 Learning Data Mining with R [哈萨克斯坦]贝特麦克哈贝尔(Bater Makhabel) 著 李洪成 许金炜 段力辉 译 图书在版编目(CIP)数据 R语言数据挖掘 / (哈…

wordpress.app南昌百度快速排名优化

1 VSS概述 版本控制是工作组软件开发中的重要方面,它能防止意外的文件丢失、允许反追踪到早期版本、并能对版本进行分支、合并和管理。在软件开发和您需要比较两种版本的文件或找回早期版本的文件时,源代码的控制是非常有用的。Visual SourceSafe 是一种…

效果好的网站建设公WordPress在线字体

Linux实操篇 Linux(实操篇三)1. 常用基本命令1.7 搜索查找类1.7.1 find查找文件或目录1.7.2 locate快速定位文件路径1.7.3 grep过滤查找及"|"管道符 1.8 压缩和解压类1.8.1 gzip/gunzip压缩1.8.2 zip/unzip压缩1.8.3 tar打包 1.9 磁盘查看和分区类1.9.1 du查看文件和…

邯郸wap网站建设公司网络推广公司方案

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 Python中import模块导入的实现原理 什么是模块import搜索路径import导入模块的原理图书推荐 专栏&…

网站点赞怎么做社区团购app

注意事项: 1.ELK版本要求5.X以上 2.Elasticsearch5.x版本必须基于jdk1.8,安装环境必须使用jdk1.8 3.操作系统windows10作为测试环境,其他环境命令有差异,请注意 4.本教程适合完全离线安装 5.windows版本ELK安装包下载路径&#xf…

西安 网站建设 培训班外贸网站建设与优化

文章目录 前言本教程解决的问题是:按照本教程方法操作后,达到的效果是想使用群晖生态软件,就必须要在服务端安装群晖系统,具体如何安装群晖虚拟机请参考: 1. 安装并配置synology drive1.1 安装群辉drive套件1.2 在局域…

自己怎样建设网站首页课程设计代做网站php

1、成员变量偏移值 (1) 成员变量偏移值,就是指这个成员变量的地址离对象首地址偏移了多少字节,这个偏移值在编译完成后是不变的。 class Base { public:int b_i;int b_j; };int main() {Base base;printf(" b_i的偏移值:%…

做网站设计需要学什么小学生制作书签

MQTT 核心概念 发布订阅 MQTT 基于发布订阅模式,它解耦了消息的发送方(发布者)和接收方(订阅者),引入了一个中间代理的角色来完成消息的路由和分发。发布者和订阅者不需要知道彼此的存在,他们…

怎样在手机上面建设网站做网站一个月30ip

目录 1.算法思想简介 2.算法应用1:问题一阐述 3.算法应用1:问题一解决 4.算法应用2:问题二阐述 5.算法应用2:问题二解决 1.算法思想简介 #蒙特卡洛算法思想 """ 蒙特卡洛方法的理论其实很类似于概率论中一个比较重…