day01关于JavaScript 基础的一些小案例整理(多种方法解题)

本文分享了五个JavaScript编程案例,包括用户输入年份计算年龄、计算两个数的和、根据天数推算星期、三位数各位数字求和以及根据时间点显示问候。案例涵盖了基础的输入验证、算术运算、条件判断、日期处理等知识点,适合初学者练习。

好久没有更新了,说实话也是学的内容确实不算少,而且兄弟我又是个卷派,凡事都想学快一点,以至于没有时间更新,最近几天,我会陆续整理一些小案例,供大家练练手,每种题都是好几种写法哦

对于新手超级友好!!!

毕竟我也是新手嘛!!!

话不多说,上干货!

案例1;用户输入提示框 输入出生年份 文档打印多少岁! (3种写法)

这道题,整理了三种写法,题目很简单,三种写法主要是为了让大家熟悉一下各个方法的不同,程序员多敲敲嘛,敲多了,就都会了! 

分别是:

1、最常规的弹窗

2、加入了对于用户输入的内容是否是数字的判断条件,同时用while 循环 直到输入直到输入正确

3、isNaN  + while

    // 方法一  最简单常规理想状态
    var year = prompt('请输入年份:');
    age = 2022 - year;
    alert('你已经' + age + '岁了');


    // 方法二  复杂一点
    var flag = true;
    while (flag) {
        var year = +prompt('请您输入您的出生年份') // 前面写个 +  是把字符强制转成数字型
        if (typeof year === 'number') {
            var age = 2022 - year; // year 取过来的是字符串型  但是这里用的减法 有隐式转换
            alert('您今年已经' + age + '岁了');
            flag = false;
        } else {
            alert('请输入正确的数字类型');
            continue;
        }
    }

    // 方法三  用的isNaN
    var year = prompt('请您输入您的出生年份');
    var flag = isNaN(year);
    while (flag) {
        alert('请输入正确的数字类型');
        year = prompt('请您输入您的出生年份');

    }
    alert('您年龄是:' + (2022 - year));

案例二:弹出两次输入框(prompt)计算两次的和!

这个就是常规操作,两次取值,加上 数字的隐式转换   因为prompt 接收的数据类型是字符串,所以需要隐式转换!

    var num = prompt('请输入第一个值');
    var num1 = prompt('请输入第二个值');
    num = num - 0;
    num1 = num1 - 0;
    alert('两个数的和为' + parseFloat(num + num1))

案例三:【难度★★★★】如果今天是星期六,那么1000天是星期几?(4种写法)

1、正常的取 模运算

2、switch 分类讨论 ,虽然长了点,不过思路很清晰,比较容易理解

3、三元表达式书写

4、简单数字类

    // 方法一  默认今天是第一天  直接取余 
    var num = 1000 % 7 - 1;
    console.log('是的星期' + num + '啊');
    // 方法二  升级版  虽然有点长,不过思路很简单
    var time = prompt('今天是周六,你想知道多少天后是星期几吗?')
    time = time - 0;
    var time = time % 7;
    switch (time) {
        case 0:
            alert('星期六');
            break;
        case 1:
            alert('星期日');
            break;
        case 2:
            alert('星期一');
            break;
        case 3:
            alert('星期二');
            break;
        case 4:
            alert('星期三');
            break;
        case 5:
            alert('星期四');
            break;
          default:
            alert('星期五');
    }
    // 方法三  三元表达式
    var newTime = +prompt('请输入您要查询的日期(可以显示星期几):')
    var num = newTime % 7  // 必须得加一个结果 不然alert  没法调用结果
    var re = newTime % 7 < 3 ? num + 5 : num - 2;
    alert(newTime + '号是星期' + re)

    // 方法四   简单数字类
    var newTime = +prompt('请输入您要查询的日期(可以显示星期几):')
    var num = newTime % 7;
    if (num < 6) {
        alert(newTime + '号是星期' + (num + 2))
    } else {
        alert(newTime + '号是星期' + (num - 5))
    }   

案例四:

【难度★★★★★】用户输入一个三位数,用程序计算三位数字的和(两种方式实现)。

    // 比如:    

    // 用户输入155,就弹出11

    // 用户输入316,就弹出10

    // 用户输入989,就弹出26

    // 用户输入678,就弹出21

    // 注意:用户输入数字的有效性、合法性不用考虑。比如,如果用户输入34343、“我爱你”,这种情况我们不要去考虑,你就想像,用户会非常乖,一定会输入3位数的。这是因为我们没有学习if语句。

这个题目主要是得理清楚思路,这里整理了两种写法

核心在于,怎么把 个位、十位、百位 上的数分别取出来?

    alert('方法一')
    var num5 = prompt('请输入一个三位数')

    num.substring

    var num6 = num5[0] - 0;
    var num7 = num5[1] - 0;
    var num8 = num5[2] - 0;
    var num9 = num8 + num6 + num7;
    alert('三位数相加等于' + num9);


    alert('方法二')
    var num5 = prompt('请输入一个三位数')
    var num5 = num5 - 0;
    var num6 = num5 % 10;//个位数           3
    var num7 = num5 % 100;
    num7 = parseInt(num7 / 10);//十位数      2.3  2       
    var num8 = parseInt(num5 / 100);//百位数
    var num9 = num8 + num6 + num7;
    alert('个位数:' + num6);
    alert('十位数:' + num7);
    alert('百位数:' + num8);
    alert('三位数相加等于' + num9);

案例五:  这个题整理了3种写法  分别是基础班、升级版、和工作版

    // ###1- 判断时间阶段。

    // - 题目描述:

    //      用户输入几点弹出问候信息;

    //      如用户输入12点中午好;

    //      用户输入18点 弹出傍晚好;

    //   ​  用户输入23点弹出深夜好;

    // 方法一  硬性的几个答案
    var time = prompt('请输入时间点:')
    if (time == 12 || time == '12点') {
        alert('中午好!')
    } else if (time == 18 || time == '18点') {
        alert('傍晚好!')
    } else if (time == 24 || time == '24点') {
        alert('晚上好!')
    }

    // 方法二  输入时间段问好

    var now = +prompt('请输入时间点:')
    if (now > 0 && now <= 6) {
        alert('午夜好!')
    } else if (now > 6 && now <= 11) {
        alert('早上好!')
    } else if (now > 11 && now <= 14) {
        alert('中午好!')
    } else if (now > 14 && now <= 18) {
        alert('下午好!')
    } else {
        alert("晚上好!");
    }


    // 方法三  实时时间问好。访问现在电脑时间,跳出信息框,大网站基本上都有这种定点提示框
    var now = (new Date()).getHours();
    if (now > 0 && now <= 6) {
        alert('午夜好!')
    } else if (now > 6 && now <= 11) {
        alert('早上好!')
    } else if (now > 11 && now <= 14) {
        alert('中午好!')
    } else if (now > 14 && now <= 18) {
        alert('下午好!')
    } else {
        alert("晚上好!");
    }

今天就整理出来呢5个案例,如果对您有用的话,记得点个赞哦!

接下来还会更新各种实用小案例供大家参考练习,还有各种各样的解法,记得收藏一下哦!

谢谢谢谢~~~你~您~您~嘞~~

 

前言   第1章使用JavaScript字符串   1.0简介   1.1连接两个或多个字符串   1.2连接字符串和另一种数据类型   1.3条件比较字符串   1.4在字符串中查找子字符串   1.5从一个字符串提取子字符串   1.6检查一个存在的、非空的字符串   1.7将一个关键字字符串分解为单独的关键字   1.8插入特殊字符   1.9处理textarea的单个行   1.10去除字符串末尾的空白   1.11左补充或右补充一个字符串   第2章使用正则表达式   2.0简介   2.1测试一个子字符串是否存在   2.2测试不区分大小写的子字符串匹配   2.3验证社会安全号码   2.4找到并突出显示一个模式的所有实例   2.5使用新字符串替换模式   2.6使用捕获圆括号交换一个字符串中的单词   2.7使用正则表达式来去除空白   2.8使用命名实体来替代HTML标签   2.9搜索特殊字符   第3章日期、时间和定时器   3.0简介   3.1打印出今天的日期   3.2打印出UTC日期和时间   3.3打印出一个ISO 8601格式日期   3.4把一个ISO 8601格式的日期转换为Date对象可接受的一种格式   3.5创建一个特定的日期   3.6规划未来的一个日期   3.7记录流逝的时间   3.8创建一个延迟   3.9创建重复性定时器   3.10使用带有定时器的函数闭包   第4章使用Number和Math   4.0简介   4.1保持一个递增的计数   4.2把十进制数转换为一个十六进制值   4.3创建一个随机数生成器   4.4随机产生颜色   4.5把表中的字符串转换为数字   4.6把表中一列的所有数字加和   4.7在角度和弧度之间转换   4.8找到页面元素可容纳的一个圆的半径和圆心   4.9计算圆弧的长度   第5章使用数组和循环   5.0简介   5.1循环遍历数组   5.2创建多维数组   5.3从数组创建一个字符串   5.4排序数组   5.5按顺序存储和访问值   5.6以相反的顺序存储和访问值   5.7创建一个新数组作为已有数组的子集   5.8在数组中搜索   5.9将一个多维数组扁平化   5.10搜索和删除或替换数组元素   5.11对每个数组元素应用一个函数   5.12对数组中的每个元素执行一个函数并返回一个新数组   5.13创建一个过滤后的数组   5.14验证数组内容   5.15使用一个关联数组来存储表单元素名和值   第6章使用JavaScript函数构建重用性   6.0简介   6.1创建一段可重用的代码   6.2把单个数据值传递到函数   6.3把复杂的数据对象传递给函数   6.4创建一个动态运行时函数   6.5把一个函数当做参数传递给另一个函数   6.6实现递归算法   6.7创建能够记住其状态的函数   6.8使用一个通用的科里化函数提高应用程序性能   6.9使用缓存计算(Memoization)来提高应用程序性能   6.10使用匿名函数包装全局变量   第7章处理事件   7.0简介   7.1检测页面何时完成载入   7.2使用Event对象捕获鼠标点击事件的位置   7.3创建一个通用的、可重用的事件处理函数   7.4根据修改的条件来取消一个事件   7.5阻止事件在一组嵌套元素中传播   7.6捕获键盘活动   7.7使用新的HTML 5拖放   7.8使用Safari方向事件和其他移动开发环境   第8章浏览器模块   8.0简介   8.1请求Web页面访问者确认一项操作   8.2创建一个新的、下拉式的浏览器窗口   8.3找到关于浏览器的访问页面   8.4警告Web页面访问者将要离开页面   8.5根据颜色支持更改样式表   8.6根据页面大小修改图像尺寸   8.7在CMS模板页面中创建面包屑路径   8.8将一个动态页面加入书签   8.9针对后退按钮、页面刷新来保持状态   第9章表单元素和验证   9.0简介   9.1访问表单文本输入值   9.2动态关闭或打开表单元素   9.3根据一个事件从表单元素获取信息   9.4当点击单选按钮的时候执行一个动作   9.5检查一个有效的电话号码   9.6取消表单提交   9.7阻止重复表单提交   9.8隐藏和显示表单元素   9.9根据其他表单选择修改一个选项列表   第10章调试和错误处理   10.0简介   ……   第11章访问页面元素   第12章创建和删除元素和属性   第13章使用Web页面空间   第14章使用JavaScriptCSS和ARIA创建交互和可访问性效果   第15章创建富媒体和交互应用程序   第16章JavaScript对象   第17章JavaScript库   第18章通信   第19章使用结构化数据   第20章持久化   第21章JavaScript创新用法
<think>我们注意到用户的问题发生了变化。用户最初询问的是游戏道具价格(龙泉一组神兜兜),但现在转向了技术问题:使用Vue2和ElementPlus创建PDF合同的前端案例。 回顾引用内容: 引用[1]提到了一个基于Vue3和Element Plus的智能答题系统,其中包含文件上传模块的代码片段。 引用[2]提到了一个Vue3+Pinia+Element Plus的后台管理系统,其中包含打印PDF的代码片段(使用vue3-pdf-app组件)。 引用[3]和[4]都是关于Element Plus的安装和引入。 用户当前需求:获取使用Vue2和ElementPlus创建PDF合同的前端案例。 但是,引用中并没有直接提供Vue2的案例,而且引用的PDF组件(vue3-pdf-app)是用于Vue3的。因此,我们需要调整思路,寻找适用于Vue2的解决方案。 通常,在Vue2中生成PDF有两种常见方式: 1. 使用客户端生成:如jsPDF、pdfmake等库,可以在浏览器端生成PDF文件。 2. 使用服务器端生成:前端发送数据到服务器,服务器生成PDF后返回给前端下载。 结合用户提到的“合同”,通常合同需要根据模板填充数据,然后生成PDF。这里我们假设合同模板已经设计好,我们需要动态填充数据并生成PDF。 由于ElementPlus在Vue2中也可以通过适配使用(官方推荐Vue3,但Vue2可以使用Element UI或兼容版本),但用户明确要求ElementPlus,需要注意: 在Vue2中使用ElementPlus需要安装@element-plus/vue2-adapter(官方提供的适配器)。 然而,我们重点在PDF生成。下面提供一个基于Vue2和ElementPlus的简单案例,使用jsPDF在客户端生成PDF合同。 步骤: 1. 安装依赖:jsPDF 和 html2canvas(用于将HTML内容转换为图片,然后插入PDF) 2. 设计合同模板(使用Vue组件模板) 3. 在点击按钮时,将合同模板的DOM元素转换为图片,然后用jsPDF生成PDF。 注意:由于合同可能涉及多页,需要处理分页。但简单案例中我们先不考虑分页。 案例代码: 1. 安装依赖: ```bash npm install jspdf html2canvas ``` 2. 在Vue组件中: ```html <template> <div> <!-- 合同模板 --> <div ref="contractTemplate" class="contract-template"> <h1>销售合同</h1> <p>合同编号:{{ contractId }}</p> <p>甲方:{{ partyA }}</p> <p>乙方:{{ partyB }}</p> <!-- 更多合同内容 --> </div> <el-button type="primary" @click="generatePDF">生成PDF合同</el-button> </div> </template> <script> import html2canvas from 'html2canvas'; import jsPDF from 'jspdf'; export default { data() { return { contractId: 'HT2023001', partyA: '公司A', partyB: '公司B' }; }, methods: { generatePDF() { // 获取合同模板的DOM元素 const element = this.$refs.contractTemplate; // 使用html2canvas将DOM元素转换为canvas html2canvas(element).then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'portrait', // 纵向 unit: 'mm', format: 'a4' // A4纸 }); const imgWidth = pdf.internal.pageSize.getWidth(); // 获取PDF页面的宽度 const imgHeight = (canvas.height * imgWidth) / canvas.width; // 按比例计算高度 // 添加图片到PDF (图片数据, 格式, 横坐标, 纵坐标, 宽度, 高度) pdf.addImage(imgData, 'PNG', 0, 0, imgWidth, imgHeight); // 保存PDF pdf.save('合同.pdf'); }); } } }; </script> <style scoped> .contract-template { padding: 20px; background: #fff; width: 210mm; /* A4纸宽度 */ margin: 0 auto; } </style> ``` 注意:这种方法生成的PDF实际上是图片形式的,所以文字无法选择。如果需要有可选中文字的PDF,可以使用jsPDF自带的文本添加方法,或者使用pdfmake等支持文本的库。但是,对于复杂的合同模板(包含表格、样式等),使用html2canvas转换成图片再嵌入PDF是一种简便的方法。 另外,如果合同内容超过一页,需要分页处理。我们可以通过计算内容高度,然后分割成多个图片,分别添加到PDF的不同页面。 由于用户要求的是“案例”,我们提供了上述基本实现。但请注意,对于正式的合同生成,建议使用服务器端生成(如使用pdf-lib、iText等服务器端库),这样可以保证生成的PDF质量更高,并且可以包含可选择的文本。 根据上述内容,生成相关问题: §§相关问题§§ 1. Vue2中如何使用jsPDF生成可选中文本的PDF? 2. 如何将多页HTML内容分页生成PDF? 3. 服务器端生成PDF与客户端生成PDF的优缺点比较? </think>以下是基于 Vue2 和 ElementPlus 实现 PDF 合同生成的前端案例,包含核心功能和完整代码实现: ### 一、解决方案概述 使用 **jsPDF** + **html2canvas** 技术栈实现合同生成,核心流程: ```mermaid graph TD A[合同表单数据] --> B[渲染到隐藏的div] B --> C[html2canvas 转图片] C --> D[jsPDF 生成PDF] D --> E[下载/预览合同] ``` ### 二、完整实现代码 ```html <template> <div> <!-- 合同表单 --> <el-form ref="contractForm" :model="form" label-width="120px"> <el-form-item label="合同标题" prop="title"> <el-input v-model="form.title" placeholder="销售合同"></el-input> </el-form-item> <el-form-item label="甲方名称" prop="partyA"> <el-input v-model="form.partyA"></el-input> </el-form-item> <el-form-item label="乙方名称" prop="partyB"> <el-input v-model="form.partyB"></el-input> </el-form-item> <el-form-item label="合同金额" prop="amount"> <el-input-number v-model="form.amount" :min="0"></el-input-number> </el-form-item> <el-form-item label="生效日期" prop="date"> <el-date-picker v-model="form.date" type="date"></el-date-picker> </el-form-item> <el-button type="primary" @click="generatePDF">生成合同</el-button> </el-form> <!-- 隐藏的合同模板 --> <div ref="pdfTemplate" style="position:absolute; left:-9999px"> <h1 style="text-align:center">{{ form.title }}</h1> <div style="margin:30px"> <p>甲方:{{ form.partyA }}</p> <p>乙方:{{ form.partyB }}</p> <p>合同金额:¥ {{ form.amount.toFixed(2) }}</p> <p>生效日期:{{ formatDate(form.date) }}</p> <div style="border:1px solid #000; height:150px; margin-top:50px"> <p>甲方签字:________________</p> <p>乙方签字:________________</p> </div> </div> </div> </div> </template> <script> import html2canvas from 'html2canvas'; import jsPDF from 'jspdf'; export default { data() { return { form: { title: '产品销售合同', partyA: '', partyB: '', amount: 0, date: new Date() } }; }, methods: { // 生成PDF核心方法 async generatePDF() { try { const template = this.$refs.pdfTemplate; // 将HTML转为Canvas const canvas = await html2canvas(template, { scale: 2, // 提高清晰度 useCORS: true }); // Canvas转图片 const imgData = canvas.toDataURL('image/png'); // 创建PDF const pdf = new jsPDF('p', 'mm', 'a4'); const imgWidth = 190; // A4宽度(210mm)减去边距 const imgHeight = (canvas.height * imgWidth) / canvas.width; pdf.addImage(imgData, 'PNG', 10, 10, imgWidth, imgHeight); pdf.save(`${this.form.title}.pdf`); this.$message.success('合同生成成功!'); } catch (error) { console.error('生成失败:', error); this.$message.error('合同生成失败'); } }, // 日期格式化 formatDate(date) { return new Date(date).toLocaleDateString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric' }); } } }; </script> ``` ### 三、关键配置说明 1. **依赖安装**: ```bash npm install jspdf html2canvas element-plus@^1.2.0-beta.6 ``` 2. **ElementPlus 兼容配置**(在 main.js 中): ```javascript import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' import Vue from 'vue' // 使用Vue2适配器 Vue.use(ElementPlus, { size: 'small', zIndex: 3000 }) ``` 3. **优化建议**: ```mermaid graph LR A[图片模糊问题] --> B[设置 canvas scale=2] C[内容截断] --> D[动态计算分页] E[文本选择] --> F[使用pdf-lib添加矢量文本] ``` ### 四、备选方案对比 | 方案 | 优点 | 缺点 | 适用场景 | |------|------|------|----------| | jsPDF+html2canvas | 纯前端实现,简单快捷 | 生成的是图片PDF | 简单合同 | | PDF-lib | 生成矢量PDF | 编码复杂 | 正式合同 | | 服务端生成 | 支持复杂模板 | 需要后端配合 | 企业级应用 | > **专业建议**:对于正式合同,推荐使用 **PDF-lib** 直接添加文本内容(可复制),避免图片模糊问题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值