5月31日
H5新增 input属性
<body>
<form action="#" method="GET">
请输入e-mail地址 :<input type="email"><br>
请输入网址:<input type="url"><br>
请输入数值:<input type="number"><br>
滑条:<input type="range"><br>
请输入日期:<input type="date"><br>
请输入月份:<input type="month"><br>
请输入年份和周数:<input type="week"><br>
请输入或选择时间:<input type="time"><br>
请输入电话号码:<input type="tel"><br>
请输入搜索关键词:<input type="search"><br>
请选择颜色:<input type="color"><br>
上传文件:<input type="file"><br>
提交:<input type="submit">
</form>
</body>
//input 选择框
<body>
<input type="text" placeholder="选择" list="cityList">
<datalist id="cityList">
<option value="经开区" label="jiangkaiqu"></option>
<option value="中原区" label="zhongyuanqu"></option>
<option value="金水区" label="jinshuiqu"></option>
</datalist>
</body>
音频(audio )视频 (video)
<audio src="./mp3/李白.mp3" controls></audio>
<video src="./mp4/1407101.mp4" controls width="300" height="200"></video>
audio
body>
<audio src="./mp3/李白.mp3" controls></audio>
<button onclick="playBtn()">播放</button>
<button onclick="pauseBtn()">暂停</button>
<button onclick="volumeBigBtn()">声音放大</button>
<button onclick="volumeSmallBtn()">声音减小</button>
<button onclick="rateBtn()">倍速+</button>
<button onclick="rateBtn2()">倍速-</button>
<button onclick="quickBtn()">快进十秒</button>
<button onclick=" muteBtn()" >静音</button>
<button onclick="resetBtn()">重播</button>
<div class="showVo"></div>
</body>
<script>
var audio = document.querySelector("audio");
var showVo = document.querySelector(".showVo");
console.dir(audio);
audio.volume =0.5;
// 播放按钮
function playBtn(){
audio.play();
}
// 暂停
function pauseBtn(){
audio.pause();
}
// 音量增大
function volumeBigBtn(){
audio.volume = audio.volume< 1?audio.volume +0.1 :1;
audio.muted = false
if (audio.volume >=0.9) {
alert('声音已经最大了')
}
showVo.innerHTML=audio.volume;
}
// 音量减小
function volumeSmallBtn(){
audio.volume = audio.volume>0 ?audio.volume -0.1 :0;
audio.muted = false
if (audio.volume <=0.1) {
alert('声音已经最小了')
}
showVo.innerHTML=audio.volume;
}
function rateBtn(){
audio.playbackRate +=0.1
// audio.playbackRate -= 0.1
showVo.innerHTML ="倍速"+audio.playbackRate
}
function rateBtn2(){
audio.playbackRate -=0.1
// audio.playbackRate -= 0.1
showVo.innerHTML ="倍速"+audio.playbackRate
}
function quickBtn(){
audio.currentTime += 10
showVo.innerHTML ="时间"+audio.currentTime
}
function muteBtn(){
audio.muted = true
showVo.innerHTML ="静音状态"+audio.muted
}
function resetBtn(){
// 重新加载音频元素
audio.load();
audio.paly();
}
</script>
6月1日
onload 加载问题
<body>
<img src="./img/阿尔卑斯山风景4k高清壁纸3840x2160_彼岸图网.jpg" alt="">
<script src="../study4/jquery.js"></script>
<script>
var oimg = document.querySelector("img")
console.log("下边:",oimg.width);
// 比如图片 标签加载了 但是图片内容没出现,所以获取不到宽高
// 比如音频 视频标签加载了,但是音频 视频内容没加载
window.onload = function(){
// 生命周期方法
// 页面标签 和内容加载完毕的时候执行
// 比如图片 标签加载了 图片内容也加载了
// 比如音频视频 标签加载了 内容也加载了
console.log("onload:",oimg.width);
alert("js-1-1")
}
// onload会覆盖 只有一个生效
window.onload = function(){
alert("js-2-2")
}
// jQ 标签加载完毕
// 可以写多个
$(function(){
console.log("jQ",$("img").width());
alert("JQ 1-1")
})
$(function(){
alert("jQ-2-2")
})
</script>
</body>
前端存储
Web 存储 API 提供了 sessionStorage (会话存储)localStorage(本地存储)两个存储对象来对网页的数据进行添加、删除、修改、查询操作。
- localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去除。
- sessionStorage 用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。
storage: 4-5M左右 请求不会携带
cookie : 指定过期时间 4kb左右 发请求的时候会携带
地理定位
<body>
<div id="showInfo"></div>
</body>
<script>
var showInfo = document.querySelector("#showInfo")
/*
定位 卫星 GPS 北斗
WiFi 基站 IP
因为定位属于 隐私 所以需要获得用户的同意 所以有弹出提示
*/
if(navigator.geolocation){
// 支持
// getCurrentPosition 获取当前位置
navigator.geolocation.getCurrentPosition(secess,errow)
}else{
// 不支持
alert('抱歉,你不太行')
}
function secess(position){
//因我们知道这个函数是获取当前位置成功的回调
//也就是说这个函数里面JS应该会有参数告诉我们位置信息
//但是我们又不知道都有哪些信息﹐
//这个时候直接打印这个arguments
// 打印函数的参数
console.log("成功",arguments);
// latitude 纬度 0 - 90
// longitude 经度 0 - 180
showInfo.innerHTML = `经度:${position.coords.longitude}<br>
纬度:${position.coords.latitude}
`
// 经纬度转换为地图 借助开放平台 百度地图 高德地图
}
function errow(){
// 打印函数的参数
console.log("失败",arguments);
}
</script>
6月2日
使用百度开放地图
<style>
body,
html,
#container {
overflow: hidden;
width: 100%;
height: 100%;
margin: 0;
font-family: "微软雅黑";
}
</style>
</head>
<body>
<!-- 打开百度地图开放平台 -->
<!--
第一次使用百度地图
1 开发者文档 web开发 JavaScript API
2 左侧菜单 开发指南 账号和获取密钥
页面下方申请密钥 ak
完成操作
3 点击申请
已经有百度地图账号的 情况下的步骤
4 登录账号 菜单上方 有控制台
5 左侧 有菜单 选择应用管理
6 我的应用
可以查看自己以前的应用
7 也可以创建新的应用
应用名称 随便填
应用类型 根据自己的需求 目前是浏览器端
白名单 测试的时候可以填*
如何使用 百度地图
1 百度地图开放平台首页
2开发者文档 web开发 JavaScript API
3左侧菜单 有个示例 DEMO
4 选择你想要的 地图
-->
<!-- 1. 复制百度地图 脚本 src 路径 ak改为自己的 -->
<!-- 2. 写 地图显示的 容器标签 -->
<!-- 3. 设置地图容器标签的 样式 -->
<!-- 4. 创建百度地图对象 -->
<!-- 5. 一些具体的 配置信息 -->
<div id="container"></div>
</body>
<script src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=QFuttil6cGdsc0aL3OGglfLHd40wS85B"></script>
</html>
<script>
var map = new BMapGL.Map('container'); // 创建Map实例
map.centerAndZoom('郑州市', 12); // 初始化地图,设置中心点坐标和地图级别
map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放
</script>
进制转换问题
<script>
/**
* 二进制 0 1
* 八进制 0 1 2 3 4 5 6 7
* 十进制 0 1 2 3 4 5 6 7 8 9
* 十六进制 0 1 2 3 4 5 6 7 9 a b c d e f
*
*
* 123 权重 百十个
* 10^2*1 + 10^1*2 + 10^0*3
* 编程里面 0开头表示八进制 010 8
* 0x开头表示十六进制 0xa 10
*
*
*/
// parseInt(数字,进制)
console.log(parseInt(10, 2));
console.log(parseInt(10, 8));
console.log(parseInt(10, 10));
console.log(parseInt(10, 16));
// 因为计算机只认识二进制
// 所以 计算机在进行计算的时候
// 是先把所有的数字转为二进制 ,进行结算得出 结果(二进制)
// 再把这个二进制的结果转为10进制
// 所有在计算的时候就会 在 2个转换的过程有不准确的 情况产生
// 实际开发怎么避免
// 因为 这个牵扯到计算保存
// 钱 单位 分 或者 最少数据库存的都是分
// 1.5元 15角 150分
</script>
canvas画布
<style>
canvas{
border: 1px solid red;
/* 不要设置宽高 */
}
</style>
</head>
<body>
<canvas width="300" height="300"> 新标签 不支持 才显示</canvas>
<!--
canvas 是一个新标签 具有 height weight属性
!!!!不要通过css样式来设置宽高 会有问题
画布 但是想要具备画布的功能 还需要js来写
-->
<script>
// 1. canvas 标签 属性设置宽高
// 2.获取画布对象
// 3.获取画布环境
// 获取画布对象
var myCanvas = document.querySelector('canvas')
// 获取画布环境
var ctx = myCanvas.getContext("2d")
// 在画布上 定位一个矩形 (x ,y, 宽, 高)
// x y 相对于画布左上角的位置
// 画笔颜色
ctx.fillStyle="red"
// ctx.fillRect(10,10,50,50)
for (let i = 0; i < 10; i++) {
ctx.fillRect(i*30,i*30,30,30)
}
for (let i = 10; i >0; i--) {
ctx.fillRect(i*30,i*30,30,30)
}
</script>
</body>
6月3日
canvas
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>canvas</title>
<style>
canvas{
border: 1px solid red;
/* 不要设置宽高 */
}
</style>
</head>
<body>
<canvas width="500" height="500"> </canvas>
<script>
var myCanvas = document.querySelector('canvas')
// 获取画布环境
var ctx = myCanvas.getContext("2d")
//设置线段颜色
ctx.strokeStyle="rgba(35,224,130,0.7)"
//☆ 1.开始路径 不带参数
ctx.beginPath()
//☆ 2.moveTo是起点
ctx.moveTo(30,30)
//☆ 3.lineTo设置点坐标
ctx.lineTo(300,300)
ctx.lineTo(30,300)
//☆ 4.闭合路径 会把点的末尾 和 起点连起来
ctx.closePath()
//☆ 5.绘制连线
ctx.stroke()
//重新绘制
//☆ moveTO()和之前的点不连起来
ctx.beginPath()
ctx.moveTo(30,30)
ctx.lineTo(300,30)
ctx.lineTo(300,300)
ctx.closePath()
ctx.stroke()
// 交叉地方的样式
// miter 默认直角
// round 圆角
// bevel 斜角
ctx.lineJoin ="round"
// 线末尾的样式
// 用lineCap 不能用closePath()
ctx.lineCap = "round"
</script>
</body>
</html>
canvas for随机颜色饼状图
<style>
canvas{
border: 1px solid red;
/* 不要设置宽高 */
}
</style>
</head>
<body>
<canvas width="500" height="500"> </canvas>
<script>
var myCanvas = document.querySelector('canvas')
// 获取画布环境
var ctx = myCanvas.getContext("2d")
var w = ctx.canvas.width;
var h = ctx.canvas.height;
/*分成几等分*/
var num = 24;
/*一份多少弧度*/
var angle = Math.PI * 2 / num;
/*原点坐标*/
var x0 = w / 2;
var y0 = h / 2;
/*获取随机颜色*/
var getRandomColor = function () {
var r = Math.floor(Math.random() * 256);
var g = Math.floor(Math.random() * 256);
var b = Math.floor(Math.random() * 256);
return 'rgb(' + r + ',' + g + ',' + b + ')';
}
/*上一次绘制的结束弧度等于当前次的起始弧度*/
//var startAngle = 0;
for (var i = 0; i < num; i++) {
var startAngle = i * angle;
var endAngle = (i + 1) * angle;
ctx.beginPath();
ctx.moveTo(x0, y0);
ctx.arc(x0, y0, 150, startAngle, endAngle);
/*随机颜色*/
ctx.fillStyle = getRandomColor();
ctx.fill();
}
</script>
</body>
canvas 曲线
<body>
<canvas width="500" height="500"> </canvas>
<script>
var myCanvas = document.querySelector('canvas')
// 获取画布环境
var ctx = myCanvas.getContext("2d")
ctx.beginPath();
ctx.moveTo(10,10)
☆// ctx.quadraticCurveTo (弯曲程度x,弯曲程度y,x,y)
ctx.quadraticCurveTo(3,500,300,250)
ctx.closePath()
ctx.stroke()
ctx.beginPath();
ctx.moveTo(10,300)
☆//贝塞尔曲线 (起始点x,起始点y,倾斜度x,倾斜度y,终点x,终点y)
ctx.bezierCurveTo(0,100,300,300,300,100)
ctx.stroke()
</script>
</body>
canvas 截屏
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>canvas</title>
<style>
canvas{
border: 1px solid red;
}
</style>
</head>
<body>
<video src="./mp4/1407101.mp4" controls id="vid"></video>
<canvas width="1000" height="500">白给</canvas>
<button onclick="caputre()">截屏</button>
<script>
var mycanvas = document.querySelector("canvas")
var ctx = mycanvas.getContext("2d")
☆// 截屏
function caputre(){
ctx.drawImage(vid,0,0,1000,500)
}
</script>
</body>
</html>
6月4日
动画事件
<style>
div{
width: 200px; height: 200px;
background-color: red;
animation: move 3s 4;
transition: all 2s;
}
@keyframes move{
to{width:600px;}
}
@keyframes move1{
to{width:600px;}
}
div:hover{
background-color: blue;
animation-play-state: paused;
animation: "" ;
}
div:active{
transition: none;
}
</style>
</head>
<body>
<div></div>
<script>
// 1. 获取 动画标签
// JS是 DOM 驱动 画事件
// 从标签为出发点
var odiv = document.querySelector("div")
// 帧动画监听 生命周期 钩子
odiv.onanimationstart = function(){
console.log("start 动画开始 只调用1次");
}
odiv.onanimationend = function(){
// 暂停 不是结束 所以不会触发这个end事件
console.log("end");
}
odiv.onanimationiteration = function(){
console.log("iteration 重复执行");
}
odiv.onanimationcancel = function(){
console.log("cancel");
}
// 过渡动画 监听 都执行 1次
odiv.ontransitionstart = function(){
console.log(" 补间动画 start");
}
odiv.ontransitionrun = function(){
console.log(" 补间动画 run ");
}
odiv.ontransitionend = function(){
console.log(" 补间动画 end");
}
odiv.ontransitioncancel = function(){
console.log(" 补间动画 cancel");
}
</script>
</body>