1. 在HTML中创建一个容器,包含一个滑块、一个滑块背景和一个用于验证的图片;
2. 使用JavaScript绑定滑块的mousedown、mousemove和mouseup事件,实现滑块的拖动;
3. 当拖动滑块时,使用JavaScript计算滑块的位置,并将其与预先设定的验证位置进行比较;
4. 如果滑块的位置与验证位置相符,验证通过,否则验证失败。
// 获取元素
const slider = document.querySelector('.slider');
const sliderBtn = slider.querySelector('.slider-btn');
const sliderBg = slider.querySelector('.slider-bg');
const sliderText = slider.querySelector('.slider-text');
const sliderIcon = slider.querySelector('.slider-icon');
// 绑定mousedown事件
sliderBtn.addEventListener('mousedown', function (e) {
// 计算滑块到背景左侧的距离
const offsetX = e.clientX - sliderBtn.offsetLeft;
// 绑定mousemove事件
document.addEventListener('mousemove', onmousemove);
// 绑定mouseup事件
document.addEventListener('mouseup', onmouseup);
// 鼠标移动事件处理函数
function onmousemove(e) {
// 计算滑块应该所在的位置
const x = e.clientX - offsetX;
const maxX = sliderBg.offsetWidth - sliderBtn.offsetWidth;
// 判断滑块是否超出背景范围
if (x < 0) {
sliderBtn.style.left = '0px';
} else if (x > maxX) {
sliderBtn.style.left = maxX + 'px';
} else {
sliderBtn.style.left = x + 'px';
}
}
// 鼠标松开事件处理函数
function onmouseup(e) {
// 计算滑块到背景左侧的距离
const distance = sliderBtn.offsetLeft - sliderIcon.offsetWidth;
// 判断是否验证成功
if (distance < 6) {
sliderText.innerText = '验证成功';
sliderText.style.color = '#fff';
sliderBtn.style.background = 'green';
sliderIcon.style.color = '#fff';
sliderIcon.classList.remove('fa-long-arrow-right');
sliderIcon.classList.add('fa-check');
sliderBtn.removeEventListener('mousedown', arguments.callee);
document.removeEventListener('mousemove', onmousemove);
document.removeEventListener('mouseup', arguments.callee);
} else {
sliderText.innerText = '拖动滑块将悬浮图像正确拼合';
sliderText.style.color = '#000';
sliderBtn.style.background = '#ddd';
sliderIcon.style.color = '#000';
}
}
});