绑定事件
通过变量获取输入值
或者通过函数获取
还有引入外部文件
猜数字小游戏
不要小数Math.floor(Math.random()*100 )
var是可变参数
let也是可变
const是常量,不能变除非是对象
次数是可变次数
Dom操作
获得 输入的数字打印出来
猜数字
html{
font-family:sans-serif;
}
body{
width: 50%;
max-width:800px;
min-width:480px;
margin:0 auto;
}
.lastResult{
color: white;
padding:3px;
}
请猜数:
//let randomNumber=Math.random()
let randomNumber=Math.floor(Math.random()*100 )
const guesses =document.querySelector('.guesses')
const lastResult =document.querySelector('.lastResult')
const lowOrHi= document.querySelector('.lowOrHi')
const guessSubmit=document.querySelector('.guessSubmit')
const guessField=document.querySelector('.guessField')
let guessCount=1
guessSubmit.addEventListener('click',checkGuess)
function checkGuess(){
console.log('hi'+randomNumber)
guessCount++
const guessNumber=guessField.value
console.log(guessNumber)
if(guessNumber==randomNumber){
lastResult.textContent='great!猜对了'
lastResult.style.color='green'
}else if(guessCount>=10){
lastResult.textContent='游戏结束'
lastResult.style.color='red'
}else{
lastResult.textContent='你错了'
lastResult.style.color='red'
if(guessNumber>randomNumber){
lowOrHi.textContent='高了'
}else{
lowOrHi.textContent='低了'
}
}
guessField.value=''
guessField.focus()
}
// checkGuess()
===值和类型都要一样
所以要类型转换
const guessNumber Number.parseInt(guessField.value)
guessField.value=”
guessField.focus()
每次清空和保持focus
Javascript实战之计算器
我们了解到有两种的盒模型,从内到外是content(实际内容包括文本&图像),padding(内边距,清除内容周围的区域,透明且不为负),border(围绕内边距padding的n条线,由width、color、style3部分组成)margin(外边距, 在元素外的额外的空白距离区域,此区域不能放其他元素)
网页设计中常听的属性名:内容(content)、填充(padding)、边框(border)、边界(margin),CSS盒子模型都具备这些属性。这些属性和我们日常生活中盒子的属性是一样一样的。内容就是盒子里面装的东西;而填充就是怕盒子里的东西损坏而添加的抗震材料;边框就是指盒子本身了;至于边界则说明盒子之间要留一定的空隙,保持通风。
默认的w3c盒模型
会把元素显得更大,我们设定width为200px,在浏览器打开元素大小会是240px
因为在此盒模型中盒子总宽度是=wiidth+padding+border
也就是你代码写的width只规定了内容宽度,盒子元素宽度还会加上padding和border
IE盒模型又称 怪异的盒子模型(border-box)
width属性是指整个盒子元素的大小,要是另外指定padding和border会压文字大小,
设置的padding和border不会改变盒子的大小,相反的是内容区的高度会随之而改变
如何区分IE盒模型和标准盒模型??
有点道理,后来我又看到了了一个解释是关于ie盒模型坑王的故事
大意就是如果你数学和我一样不好老是算错,那可就不适合用ie盒模型,因为如果你padding+border>设置的width,那怎么办呢,显示负数?还是显示0,0不就把盒子撑大了吗?难道·世界上有很多像我一样算不明白的人,所以本来正常的模型硬生生成为了怪异盒模型??
我们首先用IE盒子模型做出计算器骨架
计算器
0
C
+/-
%
/
7
8
9
*
4
5
6
-
1
2
3
+
0
.
=
用css完成排版
/* 样式重置 */
*{
margin:0;
padding: 0;
box-sizing: border-box;
}
.calculate {
width: 100vw;
height: 100vh;
background-color: #f8f7ff;
border-radius: 20px;
box-shadow: 3px 3px 4px rgba(183, 172, 228, 0.8);
padding: 48px 20px 0;
display: grid;
grid-template-rows: 30px 145px 1fr;
gap: 20px;
}
.calculate .header {
font-size: 0.8em;
color: #696673;
}
.calculate .diaplay-area {
justify-self: end;
align-self: end;
display: flex;
flex-direction: column;
align-items: flex-end;
}
.calculate .diaplay-area .equation{
font-size: 10px;
color: #cec8e0;
font-weight: bold;
}
.calculate .diaplay-area .result{
font-size: 47px;
font-weight: bold;
color: #80779a;
}
.calculate .keyboard-area {
display: grid;
grid-template-rows: repeat(5,1fr);
grid-template-columns: repeat(4,1fr);
gap: 10px;
/* height: calc(100vw+50px); */
width: calc(100vw+40px);
}
.keyboard-area .key {
width: 100%;
height: 100%;
background-color:rgba(255,255,255,1);
display: flex;
align-items: center;
justify-content: center;
border-radius: 20px;
/* box-shadow: 2px 2px 2px; */
box-shadow: 2px 2px 6px rgba(198,193,216,0.42),
inset 1px 6px 6px rgba(198,193,216,0.42),
inset -6px -6px 6px rgba(77,120,185,0.22);
font-size: 20px;
color: #7b7379;
font-weight: bold;
}
.keyboard-area .key.equal{
grid-column-start: 3;
grid-column-end: 5;
background-color: rgba(155, 127,245);
color: #fff;
}
.keyboard-area .key.plus{
background-color: rgba(155, 127,245);
color: #fff;
}
.keyboard-area .key.minus{
background-color: rgb(73, 27, 224);
color: #fff;
}
.keyboard-area .key.multiple{
background-color: rgb(176, 34, 187);
color: #fff;
}
.keyboard-area .key.division{
background-color: rgb(136, 156, 97);
color: #fff;
}
.keyboard-area .key:active{
box-shadow: inset 0 0 3px rgba(77,120,185,0.22);
}
然后我们要配合js动态实现键盘
计算器
0
const keyboardList=[
{type:'command',value:'clear',label:'C'},
{type:'command',value:'toggle-minus',label:'+/-'},
{type:'command',value:'percentage',label:'%'},
{type:'operation',value:'division',label:'+'},
{type:'number',value:'7',label:'7'},
{type:'number',value:'8',label:'8'},
{type:'number',value:'9',label:'9'},
{type:'operation',value:'multiple',label:'x'},
{type:'number',value:'4',label:'4'},
{type:'number',value:'5',label:'5'},
{type:'number',value:'6',label:'6'},
{type:'operation',value:'minus',label:'-'},
{type:'number',value:'1',label:'1'},
{type:'number',value:'2',label:'2'},
{type:'number',value:'3',label:'3'},
{type:'operation',value:'plus',label:'+'},
{type:'number',value:'0',label:'0'},
{type:'command',value:'.',label:'.'},
{type:'command',value:'equal',label:'='}
]
const keyboardElement = document.querySelector('#keyboard-area')
buildKeyboard()
function buildKeyboard(){
keyboardList.forEach(item=>{
const element =document.createElement('div')
element.dataset.type=item.type
element.dataset.value=item.value
element.classList.add('key')
element.classList.add(item.value)
element.textContent=item.label
element.addEventListener('click',clickKey)
keyboardElement.appendChild(element)
})
}
编写实现函数:由command operation number三种键组成,每种都会有对应的函数
首先来看command函数,把对应功能的实现,c对应clear,+/-对应正负切换,%对应除以100,.对应小数点要注意小数点只加一次,equal最后实现
function clickKey(e){
const dataset=e.target.dataset
switch(dataset.type){
case 'command':handleCommand(dataset.value);break;
case 'operation':handleOperation(dataset.value);break;
case 'number':handleNumber(dataset.value);break;
default:throw new Error('当前类型不存在')
}
}
const resultElement=document.querySelector('#result')
function handleCommand(value){
switch(value) {
case 'clear':resultElement.textContent='0';break;
// case 'toggle-minus': resultElement.textContent= - Number.parseFloat(resultElement.context);break;
case 'toggle-minus':resultElement.textContent =-Number.parseFloat(resultElement.textContent);break;
case 'percentage': resultElement.textContent=Number.parseFloat(resultElement.textContent)/100;break;
// case '.':resultElement.textContent.indexOf('.')!==-1||(resultElement.textContext+='.');break;
case'.':resultElement.textContent.indexOf('.')!==-1||(resultElement.textContent +='.');break;
case 'equal': ;break;
default: throw new Error('命令不存在')
}
}
再看数字,是0就不能出现0000的情况
function handleNumber(value){
if(resultElement.textContent==='0'){
resultElement.textContent=value
isLastKeyOperation=false
}else{
resultElement.textContent+=value
}
}
let lastNumber=0;
let lastOperation='';
let isLastKeyOperation=false;
function handleOperation(value){
lastNumber=Number.parseFloat(resultElement.textContent)
lastOperation=value
isLastKeyOperation=true;
}
//对应的数字也要改变
====》
function handleNumber(value){
if(resultElement.textContent==='0'||isLastKeyOperation){
resultElement.textContent=value
isLastKeyOperation=false
}else{
resultElement.textContent+=value
}
}
最后是等号功能的实现用calculate
function calculate(value){
let result=''
switch(lastOperation){
case 'plus':result=lastNumber+operationNumber;break;
case 'minus':result=lastNumber-operationNumber;break;
case 'multiple': result=lastNumber*operationNumber;break;
case 'division': result=lastNumber/operationNumber;break;
default:throw new Error("操作不存在");
}
resultElement.textContent= result
lastNumber= result
}
Original: https://blog.csdn.net/m0_46106931/article/details/127494999
Author: Neveah Chen
Title: 大四开始学前端|Javascript
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/654964/
转载文章受原作者版权保护。转载请注明原作者出处!