2022-08-30(开启关闭摄像头实例demo直接拷贝)

/场景:考试过程中 随机抽取题目拍照

//重点: 拍照功能耗费性能 所以 每一道随机题目不管做多少遍 都只拍照一次即可
<!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>camera</title>

<style>

#camera {

float: left;

margin: 20px;

}

#contentHolder {

width: 300px;

height: 300px;

margin-bottom: 10px;

}

#btn_snap {

margin: 0 auto;

border: 1px solid #f0f0f0;

background: #5CACEE;

color: #FFF;

width: 100px;

height: 36px;

line-height: 36px;

border-radius: 8px;

text-align: center;

cursor: pointer;

cursor: pointer;

/*禁止选择*/

-webkit-touch-callout: none;

/* iOS Safari */

-webkit-user-select: none;

/* Chrome/Safari/Opera */

-khtml-user-select: none;

/* Konqueror */

-moz-user-select: none;

/* Firefox */

-ms-user-select: none;

/* Internet Explorer/Edge */

user-select: none;

/* Non-prefixed version, currently not supported by any browser */

}

#imgBoxxx {

width: 200px;

margin: 60px 20px 20px;

/* border-radius: 50%; */

}

</style>

</head>

<body>

<div class="div1">dgdfgb</div>

<div id="camera">

<div id="contentHolder">

<video id="video" width="300" height="300" autoplay></video>

<canvas style="display:none;" id="canvas" width="300" height="300"></canvas>

</div>

<!-- <div id="btn_snap" onclick="myfunction()">拍照</div> -->

<ul>

<li data-id="1">11111111</li>

<li data-id="2">11111112</li>

<li data-id="3">11111113</li>

<li data-id="4">11111114</li>

<li data-id="5">11111115</li>

<li data-id="6">11111116</li>

<li data-id="7">11111117</li>

<li data-id="8">11111118</li>

<li data-id="9">11111119</li>

<li data-id="10">11111110</li>

<li data-id="11">1111111111</li>

<li data-id="12">11111112</li>

<li data-id="13">11111113</li>

<li data-id="14">11111114</li>

<li data-id="15">11111115</li>

<li data-id="16">11111116</li>

<li data-id="17">11111117</li>

<li data-id="18">11111118</li>

<li data-id="19">11111119</li>

<li data-id="20">11111120</li>

</ul>

<!-- <div id="btn_snap" onclick="myfunction()">拍照</div> -->

</div>

<script>

var questionNum; //题标

var oa = [];

var faceRandomNumArr = [];

for (var i = 0; i < 6; i++) {

var arrNum = parseInt(Math.random() * 10-3) + 2;

var flag = true;

for (var j = 0; j <= faceRandomNumArr.length; j++) {

if (arrNum == faceRandomNumArr[j]) {

flag = false;

break;

}

}

if (flag) {

faceRandomNumArr.push(arrNum);

} else {

i--;

}

}

console.log(faceRandomNumArr,'===00000')

var itemli = document.getElementsByTagName('li')

for (var i = 0; i < itemli.length; i++) {

itemli[i].index = i; //给每个li定义一个属性索引值,赋

itemli[i].onclick = function() {

console.log(this.getAttribute('data-id')); // \n换行 索引值从0开始

questionNum = this.getAttribute('data-id')

for (let i = 0; i < faceRandomNumArr.length; i++) {

if (faceRandomNumArr[i] == questionNum) {


//重点:拍照功能耗费性能 所以 每一道随机题目不管做多少遍 都只拍照一次即可

判断如果已经拍照过 那么就不再开启摄像头

if (oa.includes(questionNum)) {

return false

}

myfunction()

}

}

}

}

// navigator.mediaDevices.getUserMedia(constraints)

// .then(function(stream) {

// var video = document.querySelector('video');

// // 旧的浏览器可能没有srcObject

// if ("srcObject" in video) {

// video.srcObject = stream;

// } else {

// //避免在新的浏览器中使用它,因为它正在被弃用。

// video.src = window.URL.createObjectURL(stream);

// }

// video.onloadedmetadata = function(e) {

// video.play();

// };

// })

// .catch(function(err) {

// console.log(err.name + ": " + err.message);

// });

function myfunction() {

var canvas = document.getElementById("canvas"),

pzBtn = document.getElementById("btn_snap"),

context = canvas.getContext("2d"),

video = document.getElementById("video");

// alert('该页面会调用您的摄像头')

// 旧版本浏览器可能根本不支持mediaDevices,我们首先设置一个空对象

if (navigator.mediaDevices === undefined) {

navigator.mediaDevices = {};

}

// 一些浏览器实现了部分mediaDevices,我们不能只分配一个对象

// 使用getUserMedia,因为它会覆盖现有的属性。

// 这里,如果缺少getUserMedia属性,就添加它。

if (navigator.mediaDevices.getUserMedia === undefined) {

navigator.mediaDevices.getUserMedia = function(constraints) {

// 首先获取现存的getUserMedia(如果存在)

var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

// 有些浏览器不支持,会返回错误信息

// 保持接口一致

if (!getUserMedia) {

return Promise.reject(new Error('getUserMedia is not implemented in this browser'));

}

//否则,使用Promise将调用包装到旧的navigator.getUserMedia

return new Promise(function(resolve, reject) {

getUserMedia.call(navigator, constraints, resolve, reject);

});

}

}

var constraints = {

audio: false,

video: {

width: 720,

height: 720

}

}

navigator.mediaDevices.getUserMedia(constraints)

.then(function(stream) {

var video = document.querySelector('video');

// 旧的浏览器可能没有srcObject

if ("srcObject" in video) {

video.srcObject = stream;

} else {

//避免在新的浏览器中使用它,因为它正在被弃用。

video.src = window.URL.createObjectURL(stream);

}

video.onloadedmetadata = function(e) {

video.play();

sessionStorage.setItem('flag', questionNum)


//拍照成功的都存储到数组中

oa.push(sessionStorage.getItem('flag'))

console.log(oa, '===')

setTimeout(function() {

var date = new Date().getTime();

// 点击,canvas画图

context.drawImage(video, 0, 0, 300, 300);

// 获取图片base64链接

var image = canvas.toDataURL('image/png');

// 定义一个img

var img = new Image();

//设置属性和src

img.id = "imgBox";

img.src = image;

//将图片添加到页面中

document.body.appendChild(img);

window.mediaStreamTrack = typeof video.srcObject.stop === 'function' ? video

.srcObject : video.srcObject.getTracks()[0];

window.mediaStreamTrack && window.mediaStreamTrack.stop();

// base64转文件

function dataURLtoFile(dataurl, filename) {

var arr = dataurl.split(','),

mime = arr[0].match(/:(.*?);/)[1],

bstr = atob(arr[1]),

n = bstr.length,

u8arr = new Uint8Array(n);

while (n--) {

u8arr[n] = bstr.charCodeAt(n);

}

return new File([u8arr], filename, {

type: mime

});

}

console.log(date);

console.log(dataURLtoFile(image, date + '.png'));

}, 500)

};

})

.catch(function(err) {

console.log(err.name + ": " + err.message);

});

};

</script>

</body>

</html>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容