当前位置: 首页 > news >正文

用户界面创建一个新的运动类型

● 现在我们需要根据我们之前规划的架构步骤来实现在用户界面创建一个运动类型
● 首先我们在要获取用户在表单中输入的数据

 //从表单中获取数据const type = inputType.value;const distance = +inputDistance.value;const duration = +inputDuration.value;

● 然后针对与不同的运动类型来判断用户的输入是否正确

//如果是跑步运动类型,创建跑步运动对象if (type === 'running') {const cadence = +inputCadence.value;if (!Number.isFinite(distance) || //输入的必须是属于否则报错!Number.isFinite(duration) ||!Number.isFinite(cadence))return alert('输入的值必须是数字!');}//如果是骑行运动类型,创建骑行运动对象if (type === 'cycling') {const elevation = +inputElevation.value;if (!Number.isFinite(distance) ||!Number.isFinite(duration) ||!Number.isFinite(elevation))return alert('输入的值必须是数字!');}

在这里插入图片描述

● 上面的写法明显违背了我们的不重复原则,所以我们更换一种写法

//提交表单之后生成新的运动_newWorkout(e) {
//判断输入的值是否为数字,...inputs是一个剩余参数语法,把所有参数都放在一个数组里面const validInputs = (...inputs) =>//every方法,判断数组中的每个元素是否都满足条件,都满足返回true,否则返回falseinputs.every(inp => Number.isFinite(inp));e.preventDefault(); //组织表单默认行为//从表单中获取数据const type = inputType.value;const distance = +inputDistance.value;const duration = +inputDuration.value;//如果是跑步运动类型,创建跑步运动对象if (type === 'running') {const cadence = +inputCadence.value;if (//判断输入的值是否为数字!validInputs(distance, duration, cadence))return alert('输入的值必须是数字!');}//如果是骑行运动类型,创建骑行运动对象if (type === 'cycling') {const elevation = +inputElevation.value;if (!validInputs(distance, duration, elevation))return alert('输入的值必须是数字!');}

● 当然,这些数据并不是只要是数字就行了,还要不是负数,我们用相同的方法来书写

_newWorkout(e) {//判断输入的值是否为数字,...inputs是一个剩余参数语法,把所有参数都放在一个数组里面const validInputs = (...inputs) =>//every方法,判断数组中的每个元素是否都满足条件,都满足返回true,否则返回falseinputs.every(inp => Number.isFinite(inp));//判断输入的值是否为正数const allPositive = (...inputs) => inputs.every(inp => inp > 0);e.preventDefault(); //组织表单默认行为//从表单中获取数据const type = inputType.value;const distance = +inputDistance.value;const duration = +inputDuration.value;//如果是跑步运动类型,创建跑步运动对象if (type === 'running') {const cadence = +inputCadence.value;if (//判断输入的值是否为数字!validInputs(distance, duration, cadence) ||!allPositive(distance, duration, cadence))return alert('输入的值必须是数字且必须为正数!');}//如果是骑行运动类型,创建骑行运动对象if (type === 'cycling') {const elevation = +inputElevation.value;if (!validInputs(distance, duration, elevation) ||!allPositive(distance, duration))return alert('输入的值必须是数字且必须为正数!');}

在这里插入图片描述

● 现在我们就需要创建运动对象,并将数据存入进去

 const type = inputType.value;const distance = +inputDistance.value;const duration = +inputDuration.value;const { lat, lng } = this.#mapEvent.latlng; //获取点击地图的经纬度let workout;//如果是跑步运动类型,创建跑步运动对象if (type === 'running') {const cadence = +inputCadence.value;if (//判断输入的值是否为数字!validInputs(distance, duration, cadence) ||!allPositive(distance, duration, cadence))return alert('输入的值必须是数字且必须为正数!');workout = new Running([lat, lng], distance, duration, cadence); //创建跑步运动对象}//如果是骑行运动类型,创建骑行运动对象if (type === 'cycling') {const elevation = +inputElevation.value;if (!validInputs(distance, duration, elevation) ||!allPositive(distance, duration))return alert('输入的值必须是数字且必须为正数!');workout = new Cycling([lat, lng], distance, duration, elevation); //创建骑行运动对象}//创建新的对象到workout数组中this.#workouts.push(workout);

在这里插入图片描述

数据已经正常可以拿到了;

● 然后通过修改type,来改变CSS样式

class Running extends Workout {//继承Workout类type = 'running';constructor(coords, distance, duration, cadence) {super(coords, distance, duration); //调用父类构造函数this.cadence = cadence;this.calcPace();}//计算配速calcPace() {this.pace = this.duration / this.distance;return this.pace;}
}class Cycling extends Workout {type = 'cycling';constructor(coords, distance, duration, elevationGain) {super(coords, distance, duration);this.elevationGain = elevationGain;this.calcSpeed();}//计算速度calcSpeed() {this.speed = this.distance / (this.duration / 60);return this.speed;}
}renderWorkoutMarker(workout) {L.marker(workout.coords).addTo(this.#map).bindPopup(L.popup({maxWidth: 250,minWidth: 100,autoClose: false,closeOnClick: false,className: `${workout.type}-popup`,})).setPopupContent('运动').openPopup();}
}

在这里插入图片描述

● 下篇文章将在地图上展现项目,并且消除一些关闭表单的一些小问题

http://www.lryc.cn/news/495615.html

相关文章:

  • ubuntu防火墙入门(一)——设置服务、关闭端口
  • 分治算法——二分查找(c++)(详解)
  • Binder架构
  • 大数据治理:解锁数据价值,引领未来创新
  • 解决windows下php8.x及以上版本,在Apache2.4中无法加载CURL扩展的问题
  • 【韩顺平老师Java反射笔记】
  • Arrays.asList()新增报错,该怎么解决
  • 【热门主题】000072 分布式数据库:开启数据管理新纪元
  • 基于Springboot开发的云野旅游平台
  • 2024金盾信安杯线上赛 MISC ezpng[wp]
  • 搭建业务的性能优化指南
  • 电脑提示报错“Directx error”怎么解决?是什么原因导致的?游戏软件提示“Directx error”错误的解决方案
  • Linux——自定义简单shell
  • 基于matlab程序实现人脸识别
  • Unity跨平台基本原理
  • 【前端开发】小程序无感登录验证
  • Flink常见面试题
  • spark同步mysql数据到sqlserver
  • Python Web 开发:FastAPI 基本概念与应用
  • Linux设置开启启动脚本
  • go并发设计模式runner模式
  • nn.RNN解析
  • How to monitor Spring Boot apps with the AppDynamics Java Agent
  • Linux学习笔记12 systemd的其他命令
  • NGO-CNN-BiGRU-Attention北方苍鹰算法优化卷积双向门控循环单元时间序列预测,含优化前后对比
  • 【分布式】分布式缓存
  • 深度学习中的迁移学习:应用与实践
  • 28.UE5实现对话系统
  • Redis中的分布式锁(步步为营)
  • CentOS 7安装mysql+JDK+Tomcat完成流程