中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

濟(jì)南建站免費(fèi)模板瀏覽器網(wǎng)站進(jìn)入口

濟(jì)南建站免費(fèi)模板,瀏覽器網(wǎng)站進(jìn)入口,怎么做代購(gòu)彩票網(wǎng)站,男女做暖暖的試看網(wǎng)站一、背景 前兩天發(fā)了一篇 vue-monoplasty-slide-verify 滑動(dòng)驗(yàn)證碼插件使用及踩坑_vue-monoplasty-slide-verify 引用后不顯示-CSDN博客 這兩天項(xiàng)目又需要通過(guò)接口校驗(yàn),接口返回了背景圖片和拼圖圖片,于是在網(wǎng)上找了一篇帖子,vue 圖片滑動(dòng)…

一、背景

前兩天發(fā)了一篇?vue-monoplasty-slide-verify 滑動(dòng)驗(yàn)證碼插件使用及踩坑_vue-monoplasty-slide-verify 引用后不顯示-CSDN博客

這兩天項(xiàng)目又需要通過(guò)接口校驗(yàn),接口返回了背景圖片和拼圖圖片,于是在網(wǎng)上找了一篇帖子,vue + 圖片滑動(dòng)驗(yàn)證_基于vue圖片滑動(dòng)驗(yàn)證-CSDN博客

寫的不錯(cuò),代碼拿過(guò)來(lái)就能用;但是感覺(jué)源碼和vue-monoplasty-slide-verify的比較像,vue-monoplasty-slide-verify的icon圖片拿過(guò)來(lái)直接就能在參考帖子里用。

二、獲取驗(yàn)證碼接口返回?cái)?shù)據(jù)示例

三、校驗(yàn)接口返回?cái)?shù)據(jù)示例

?

四、封裝與后端配合的滑動(dòng)組件

//在參考帖基礎(chǔ)上修改的
<template><div><el-dialog :visible.sync="showSlideVerify" title="向右滑動(dòng)通過(guò)驗(yàn)證" :width=" w +48 + 'px'" :close-on-click-modal="false" :close-on-press-escape="false"><div class="slide-verify" :style="{width: w + 'px'}" id="slideVerify" onselectstart="return false;"><!-- 圖片加載遮蔽罩 --><div :class="{'slider-verify-loading': loadBlock}"></div><canvas :width="w" :height="h" ref="canvas"></canvas><div v-if="showRefresh" @click="refresh" class="slide-verify-refresh-icon"></div><canvas :width="block_width" :height="h" ref="block" class="slide-verify-block"></canvas><!-- container --><div class="slide-verify-slider" :class="{'container-active': containerActive, 'container-success': containerSuccess, 'container-fail': containerFail}"><div class="slide-verify-slider-mask" :style="{width: sliderMaskWidth}"><!-- slider --><div @mousedown="sliderDown" @touchstart="touchStartEvent" @touchmove="touchMoveEvent" @touchend="touchEndEvent" class="slide-verify-slider-mask-item" :style="{left: sliderLeft}"><div class="slide-verify-slider-mask-item-icon"></div></div></div><span class="slide-verify-slider-text">{{sliderText}}</span></div></div></el-dialog></div></template>
<script>
import { getCanvasAndPuzzle, checkPuzzle } from '@/api/modules/setting'export default {name: 'SlideVerify',props: {sliderText: {type: String,default: '向右滑動(dòng)'},showRefresh: {type: Boolean,default: true}},data () {return {showSlideVerify: false,containerActive: false, // container active classcontainerSuccess: false, // container success classcontainerFail: false, // container fail classnonceStr: '',canvasCtx: null,blockCtx: null,block: null,block_src: undefined,block_y: undefined,block_width: undefined,block_height: undefined,block_radius: undefined,w: 0,h:0,img: undefined,originX: undefined,originY: undefined,isMouseDown: false,trail: [],sliderLeft: 0, // block right offsetsliderMaskWidth: 0, // mask width,success: false, // Bug Fixes 修復(fù)了驗(yàn)證成功后還能滑動(dòng)loadBlock: true, // Features 圖片加載提示,防止圖片沒(méi)加載完就開(kāi)始驗(yàn)證timestamp: null}},methods: {show () {Object.assign(this.$data, {success: false,containerActive: false,containerSuccess: false,containerFail: false,nonceStr: '',w: 0,h: 0,img: undefined,loadBlock: true,block_src: undefined,block_y: undefined,block_width: undefined,block_height: undefined,block_radius: undefined,sliderLeft: 0,sliderMaskWidth: 0});this.getCanvasAndPuzzle();},getCanvasAndPuzzle () { //從接口獲取滑動(dòng)組件背景圖片、圖片寬高與拼圖圖片、拼圖寬高、block_radius、垂直方向上的位置getCanvasAndPuzzle().then(res => {Object.assign(this.$data, {nonceStr: res.data.nonceStr, //根據(jù)接口的校驗(yàn)邏輯,校驗(yàn)時(shí)需傳遞給后臺(tái)w: res.data.canvasWidth,h: res.data.canvasHeight,img: res.data.canvasSrc,block_src: res.data.blockSrc,block_y: res.data.blockY,block_width: res.data.blockWidth,block_height: res.data.blockHeight,block_radius: res.data.blockRadius,showSlideVerify: true});this.$nextTick(() => {this.init();});}).catch(error => {this.$message.error(error);});},init () {this.initDom();this.initImg();this.bindEvents();},initDom () {this.block = this.$refs.block;this.canvasCtx = this.$refs.canvas.getContext('2d');this.blockCtx = this.block.getContext('2d');},initImg () {let _this = this, image = new Image(), blockImage = new Image();image.src = this.img;blockImage.src = this.block_src;image.onload = () => {_this.canvasCtx.drawImage(image, 0, 0, _this.w, _this.h);};blockImage.onload = () => {_this.loadBlock = false;// 第二個(gè)、三個(gè)參數(shù)分別是被拖動(dòng)的拼圖在水平、垂直方向的偏移量_this.blockCtx.drawImage(blockImage, 0, _this.block_y, _this.block_width, _this.block_height);};},sliderDown (event) {if (this.success) return;this.originX = event.clientX;this.originY = event.clientY;this.isMouseDown = true;this.timestamp = + new Date();},touchStartEvent (e) {if (this.success) return;this.originX = e.changedTouches[0].pageX;this.originY = e.changedTouches[0].pageY;this.isMouseDown = true;this.timestamp = + new Date();},bindEvents () {document.addEventListener('mousemove', (e) => {if (!this.isMouseDown) return false;const moveX = e.clientX - this.originX;const moveY = e.clientY - this.originY;if (moveX < 0 || moveX + 38 >= this.w) return false;this.sliderLeft = moveX + 'px';let blockLeft = (this.w - 40 - 20) / (this.w - 40) * moveX;this.block.style.left = blockLeft + 'px';this.containerActive = true;this.sliderMaskWidth = moveX + 'px';this.trail.push(moveY);});document.addEventListener('mouseup', (e) => {if (!this.isMouseDown) return false;this.isMouseDown = false;if (e.clientX === this.originX) return false;this.containerActive = false;this.timestamp = + new Date() - this.timestamp;this.verify();});},touchMoveEvent (e) {if (!this.isMouseDown) return false;const moveX = e.changedTouches[0].pageX - this.originX;const moveY = e.changedTouches[0].pageY - this.originY;if (moveX < 0 || moveX + 38 >= this.w) return false;this.sliderLeft = moveX + 'px';let blockLeft = (this.w - 40 - 20) / (this.w - 40) * moveX;this.block.style.left = blockLeft + 'px';this.containerActive = true;this.sliderMaskWidth = moveX + 'px';this.trail.push(moveY);},touchEndEvent (e) {if (!this.isMouseDown) return false;this.isMouseDown = false;if (e.changedTouches[0].pageX === this.originX) return false;this.containerActive = false;this.timestamp = + new Date() - this.timestamp;this.verify();},verify () {
//將拼圖水平方向拖動(dòng)量傳遞給接口,接口來(lái)校驗(yàn)是否拼好返回校驗(yàn)結(jié)果,我也不是很理解這個(gè)操作,但沒(méi)辦法,就讓這樣做,只能自己網(wǎng)上找例子,然后改出來(lái)了checkPuzzle({nonceStr: this.nonceStr,value: parseInt(this.block.style.left) //被拖動(dòng)拼圖在水平方向上的移動(dòng)量}).then(res => {if(res.code===-1 || !res.data) {//校驗(yàn)通過(guò),res.data的值為true,否則為falsethis.containerFail = true;this.$message.error(res.message);this.refresh();} else {this.$emit('verify-success');Object.assign(this.$data, {containerSuccess: true,success: true,showSlideVerify: false});}}).catch(error => {this.$message.error(error);});},refresh () {let { w, h, block_width } = this;this.canvasCtx.clearRect(0, 0, w, h);this.blockCtx.clearRect(0, 0, block_width, h);this.block.style.left = 0;Object.assign(this.$data, {success: false,containerActive: false,containerSuccess: false,containerFail: false,nonceStr: '',img: undefined,loadBlock: true,sliderLeft: 0,sliderMaskWidth: 0});this.getCanvasAndPuzzle();}}
}
</script>
<style scoped>
.slide-verify {position: relative;
}/* 圖片加載樣式 */
.slider-verify-loading {position: absolute;top: 0;right: 0;left: 0;bottom: 0;background: rgba(255, 255, 255, 0.9);z-index: 999;animation: loading 1.5s infinite;
}@keyframes loading {0% {opacity: 0.7;}100% {opacity: 9;}
}.slide-verify-block {position: absolute;left: 0;top: 0;
}.slide-verify-refresh-icon {position: absolute;right: 0;top: 0;width: 34px;height: 34px;cursor: pointer;background: url('./imgs/icon.png') 0 -437px;background-size: 34px 471px;
}.slide-verify-slider {position: relative;text-align: center;width: 100%;height: 40px;line-height: 40px;/* margin-top: 15px; */background: #f7f9fa;color: #45494c;border: 1px solid #e4e7eb;
}.slide-verify-slider-mask {position: absolute;left: 0;top: 0;height: 40px;border: 0 solid #1991fa;background: #d1e9fe;
}.slide-verify-slider-mask-item {position: absolute;top: 0;left: 0;width: 40px;height: 40px;background: #fff;box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);cursor: pointer;transition: background 0.2s linear;
}.slide-verify-slider-mask-item:hover {background: #1991fa;
}.slide-verify-slider-mask-item:hover .slide-verify-slider-mask-item-icon {background-position: 0 -13px;
}.slide-verify-slider-mask-item-icon {position: absolute;top: 15px;left: 13px;width: 14px;height: 12px;background: url('./imgs/icon.png') 0 -26px;background-size: 34px 471px;
}
.container-active .slide-verify-slider-mask-item {height: 38px;top: -1px;border: 1px solid #1991fa;
}.container-active .slide-verify-slider-mask {height: 38px;border-width: 1px;
}.container-success .slide-verify-slider-mask-item {height: 38px;top: -1px;border: 1px solid #52ccba;background-color: #52ccba !important;
}.container-success .slide-verify-slider-mask {height: 38px;border: 1px solid #52ccba;background-color: #d2f4ef;
}.container-success .slide-verify-slider-mask-item-icon {background-position: 0 0 !important;
}.container-fail .slide-verify-slider-mask-item {height: 38px;top: -1px;border: 1px solid #f57a7a;background-color: #f57a7a !important;
}.container-fail .slide-verify-slider-mask {height: 38px;border: 1px solid #f57a7a;background-color: #fce1e1;
}.container-fail .slide-verify-slider-mask-item-icon {top: 14px;background-position: 0 -82px !important;
}.container-active .slide-verify-slider-text,
.container-success .slide-verify-slider-text,
.container-fail .slide-verify-slider-text {display: none;
}
</style>

五、 接口

意義不太大,要根據(jù)項(xiàng)目實(shí)際情況來(lái)的

?六、CSS 代碼里用到的圖片資源

https://download.csdn.net/download/hrcsdn13/89709217

七、CSS與組件文件位置

八、效果圖

http://www.risenshineclean.com/news/5062.html

相關(guān)文章:

  • 北京出名做網(wǎng)站的公司如何做好推廣
  • 阿里云認(rèn)證網(wǎng)站建設(shè)題庫(kù)免費(fèi)制作網(wǎng)頁(yè)平臺(tái)
  • 企業(yè)做網(wǎng)站設(shè)計(jì)的北京網(wǎng)絡(luò)推廣外包公司排行
  • 成都市城鄉(xiāng)建設(shè)委員網(wǎng)站seo網(wǎng)站診斷價(jià)格
  • 要給公司做一個(gè)網(wǎng)站怎么做網(wǎng)站優(yōu)化的方式有哪些
  • 北京比較好的網(wǎng)站建設(shè)公司谷歌seo服務(wù)
  • 做競(jìng)價(jià)網(wǎng)站用什么系統(tǒng)好原創(chuàng)軟文
  • dede推薦評(píng)級(jí)網(wǎng)站模版百度搜索推廣費(fèi)用
  • 免費(fèi)企業(yè)網(wǎng)站空間網(wǎng)絡(luò)營(yíng)銷策劃的具體流程是
  • 越南做網(wǎng)站服務(wù)器最新app推廣項(xiàng)目平臺(tái)
  • 網(wǎng)站公司建站營(yíng)銷活動(dòng)
  • 哪個(gè)網(wǎng)站可以做視頻播放器最新全國(guó)疫情消息
  • 西安有哪些做網(wǎng)站建設(shè)的公司好網(wǎng)絡(luò)推廣計(jì)劃書范文
  • 游戲推廣是做什么的關(guān)鍵詞優(yōu)化公司排名
  • html5響應(yīng)式網(wǎng)站制作seo網(wǎng)站排名廠商定制
  • 成都 網(wǎng)站設(shè)計(jì)網(wǎng)站建設(shè)工作總結(jié)
  • 黔東南網(wǎng)站開(kāi)發(fā)gzklyy手機(jī)網(wǎng)站建設(shè)價(jià)格
  • 沒(méi)有基礎(chǔ)怎么學(xué)網(wǎng)站建設(shè)seo短視頻網(wǎng)頁(yè)入口引流免費(fèi)
  • 寧波做網(wǎng)站的大公司seo網(wǎng)站優(yōu)化師
  • 加猛掙錢免費(fèi)做網(wǎng)站軟件免費(fèi)網(wǎng)站推廣網(wǎng)站破解版
  • 自己做的網(wǎng)站服務(wù)器開(kāi)了進(jìn)不去百度號(hào)碼認(rèn)證平臺(tái)官網(wǎng)
  • 微信公眾平臺(tái)制作網(wǎng)站58網(wǎng)絡(luò)推廣
  • 風(fēng)訊網(wǎng)站內(nèi)容管理系統(tǒng)西安網(wǎng)站建設(shè)公司電話
  • 自助建站申請(qǐng)書網(wǎng)絡(luò)營(yíng)銷方案有哪些
  • 電競(jìng)logo免費(fèi)設(shè)計(jì)西安百度推廣優(yōu)化公司
  • 免費(fèi)電商網(wǎng)站建設(shè)中國(guó)培訓(xùn)網(wǎng)官網(wǎng)
  • 建設(shè)網(wǎng)站的公司興田德潤(rùn)怎么聯(lián)系北京企業(yè)網(wǎng)站seo平臺(tái)
  • 濰坊網(wǎng)站建設(shè)聯(lián)系方式東莞網(wǎng)站seo公司哪家大
  • 網(wǎng)頁(yè)源代碼快捷鍵湘潭seo優(yōu)化
  • 做援交的網(wǎng)站100個(gè)常用的關(guān)鍵詞