box-sizing: border-box;

}

.canfile_image::before {

content: “”;

position: absolute;

width: 100%;

height: 100%;

box-shadow: 0 0 8px 5px rgba(255, 255, 255, 0.8) inset;

}

.canvas_slide {

width: 90%;

height: 45px;

background: #eee;

text-align: center;

line-height: 80rpx;

margin: 0 auto;

position: relative;

font-size: 26rpx;

}

/* 滑条上滑块经过的部分 */

.canvas_width {

position: absolute;

left: 0;

top: 0;

height: 45px;

background-color: #1991FA;

width: 0;

border-top: 1px solid #ddd;

border-bottom: 1px solid #ddd;

}

/* 滑块 */

.canvas_kus {

width: 48px;

height: 45px;

background-color: #fff;

font-size: 36rpx;

font-weight: 700;

position: absolute;

left: 0;

top: 0;

border: 1px solid #ddd;

color: #fff;

box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);

}

.canvas_kus>view {

width: 100%;

height: 100%;

background-position: center;

background-size: 50% 40%;

background-repeat: no-repeat;

}

/* 底部按钮位置 */

.canvas_guil {

width: 100%;

border-top: 1px solid #f4f4f4;

height: 100rpx;

display: flex;

align-items: center;

float: left;

font-size: 30rpx;

color: #666;

}

.canvas_guil>image {

margin-left: 30rpx;

}

index.js

Component({

/**

  • 组件的属性列表

*/

properties: {

sildeBlockCont: { //接受父组件值

type: String

}

},

/**

  • 组件的初始数据

*/

data: {

canvas_width: 0,

slidebel: false, //滑动弹窗

canfile_image: ‘’, //裁剪图片

canfile_x: ‘’, //被抠方块的水平位置

canfile_y: ‘’, //被抠方块的垂直位置

slide_clientX: 0, //移动位置

slide_status: 0, //0 停止操作 1 触发长按 2 正确 3 错误

},

/**

  • 组件的方法列表

*/

methods: {

// 弹窗

visidlisd(e) {

var that = this

this.setData({

slidebel: !this.data.slidebel

})

if (this.data.slidebel) {

if (this.data.canvas_width != 0) {

this.slide_tap()

return

}

wx.nextTick(() => {

let query = this.createSelectorQuery()

query.select(‘#canvas_img’).boundingClientRect(function (rect) {

that.setData({

canvas_width: rect.width

})

that.slide_tap()

}).exec()

})

}

},

// 画布

slide_tap(e) {

var that = this

var imgIndex = Math.round(Math.random() * 13 + 1)

that.setData({

canfile_x: Math.round(Math.random() * (this.data.canvas_width - 120) + 60),

canfile_y: Math.round(Math.random() * (this.data.canvas_width * 13 / 28 - 60)),

canfile_image: ‘’

})

setTimeout(function () {

var context = wx.createCanvasContext(‘firstCanvas’, that)

context.width = that.data.canvas_width

context.height = that.data.canvas_width * 13 / 28

// /imgs/puzzle-bg-${imgIndex}.jpg 为滑块背景图 从静态资源获取 如从接口获取可从that.properties.properties拿

context.drawImage(/imgs/puzzle-bg-${imgIndex}.jpg, 0, 0, context.width, context.height)

context.draw(false, (() => {

wx.canvasToTempFilePath({

x: that.data.canfile_x,

y: that.data.canfile_y,

width: 50,

height: 50,

canvasId: ‘firstCanvas’,

success: function (res) {

that.setData({

canfile_image: res.tempFilePath

})

}

}, that);

}))

}, 50)

},

// 滑动开始

slide_start(e) {

this.setData({

slide_status: 1

})

},

// 滑动中

slide_hmove(e) {

this.setData({

slide_clientX: (e.touches[0].clientX - 60) < 1 ? 0 : (e.touches[0].clientX - 60)

})

},

//滑动结束

slide_chend(e) {

var that = this

var cliextX;

var maxX = this.data.canvas_width - 60

if (that.data.slide_clientX < 1) {

that.data.slide_status = 0

return false

}

if (that.data.slide_clientX > maxX) {

cliextX = maxX

} else {

cliextX = that.data.slide_clientX

}

if (((that.data.canfile_x + 5) > cliextX) && ((that.data.canfile_x - 5) < cliextX)) {

that.setData({

slide_status: 2,

slide_clientX: that.data.canfile_x,

})

setTimeout(function () {

that.setData({

slidebel: false,

})

}, 500)

wx.showToast({

icon: ‘success’,

title: ‘验证成功’,

})

that.triggerEvent(‘puzzleVerify’)

} else {

that.setData({

slide_status: 3,

})

}

setTimeout(function () {

that.setData({

slide_status: 0,

slide_clientX: 0,

})

}, 500)

},

},

lifetimes: {

created() {

// 在组件实例刚刚被创建时执行

},

ready() {

// 在组件在视图层布局完成后执行

// console.log(this.properties.sildeBlockCont);

},

}

})

index.json

{

“component”: true,

“usingComponents”: {}

}

父组件调用滑块

在这里插入图片描述

json

“usingComponents”: {

“puzzleVerify”: “/components/puzzleVerify/index”

}

wxml

js

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是附赠给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等

详细大厂面试题答案、学习笔记、学习视频等资料领取,点击资料领取直通车免费领取!

前端视频资料:
开发知识点,真正体系化!**

[外链图片转存中…(img-qNLrmXuA-1712341629938)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是附赠给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等

详细大厂面试题答案、学习笔记、学习视频等资料领取,点击资料领取直通车免费领取!

[外链图片转存中…(img-kbtclFIc-1712341629938)]

前端视频资料:

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐