欢迎访问宙启技术站
智能推送

js实现兼容PC端和移动端滑块拖动选择数字效果

发布时间:2023-05-15 06:16:25

近年来,移动设备的普及率越来越高,用户对于网站和应用的移动端友好体验需求也越来越高。其中一个重要的需求就是界面元素的可移动性,比如滑动条和拖动选择数字等功能。如何实现这类移动端友好的交互效果?本文将详细介绍如何用js实现兼容PC端和移动端的滑块拖动选择数字效果。

1. 界面设计

首先,为了实现滑块拖动选择数字效果,我们需要在页面上设计一个带有滑块的基本界面。界面的具体设计取决于实际需求,可以在HTML中用div或者canvas实现。下面代码展示的是一个简单的HTML实现方法:

<!DOCTYPE html>
<html>
<head>
	<title>Slider</title>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<style>
		#slider {
			width: 80%;
			height: 20px;
			border: 1px solid gray;
			position: relative;
			margin-bottom: 20px;
		}
		#slider .thumb {
			width: 40px;
			height: 40px;
			border-radius: 50%;
			background-color: blue;
			position: absolute;
			top: -10px;
			margin-left: -20px;
		}
		#slider .range {
			width: 50%;
			height: 100%;
			background-color: blue;
			position: absolute;
			left: 0;
			top: 0;
		}
	</style>
</head>
<body>
	<div id="slider">
		<div class="range"></div>
		<div class="thumb"></div>
	</div>
</body>
</html>

这里通过一个div元素实现了一个长度为80%的横向滑块,滑块上左侧的50%被标示为一个蓝色色块,用于展示当前选择的数值的比例。我们还定义了一个圆形“拇指”作为滑块上的控制器,用于拖动和调整数值。具体界面的样式可以根据需求进行修改。

2. 程序实现

实现滑块拖动选择数字的事件核心部分是通过js编写的拖动事件监听器。一般来说,移动端的触屏事件和PC端的鼠标事件不同,需要在事件处理程序中进行区分和适配。因此,实现一个兼容PC端和移动端触屏事件的拖动监听器是必要的。

var slider = document.getElementById('slider');
var range = slider.querySelector('.range');
var thumb = slider.querySelector('.thumb');

// 初始化滑块控制器位置和数值
var maxValue = 100;
var minValue = 0;
var currentValue = 50;
var thumbSize = thumb.offsetWidth;
var sliderWidth = slider.offsetWidth - thumbSize;
var offset = slider.offsetLeft + thumbSize / 2;

thumb.addEventListener('mousedown', onThumbDown);
thumb.addEventListener('touchstart', onThumbDown);

document.addEventListener('mousemove', onThumbMove);
document.addEventListener('touchmove', onThumbMove);

document.addEventListener('mouseup', onThumbUp);
document.addEventListener('touchend', onThumbUp);

function onThumbDown(e) {
	if (e.touches) {
		e = e.touches[0];
	}
	thumb.startX = e.pageX - thumb.offsetLeft;
	thumb.active = true;
}

function onThumbMove(e) {
	if (!thumb.active) {
		return;
	}
	if (e.touches) {
		e = e.touches[0];
	}
	var newX = e.pageX - thumb.startX - offset;
	var rangeWidth = Math.max(Math.min(newX, sliderWidth), 0);
	var rangeValue = rangeWidth / sliderWidth * (maxValue - minValue) + minValue;
	currentValue = parseInt(rangeValue, 10);
	updateSlider();
}

function onThumbUp(e) {
	thumb.active = false;
}

function updateSlider() {
	range.style.width = currentValue / (maxValue - minValue) * 100 + '%';
	thumb.style.left = (currentValue / (maxValue - minValue)) * sliderWidth + 'px';
}

在这个例子中,我们为拖动控制器和滑块添加了mousedown和touchstart事件监听器,以便在用户点击它们时开始拖动操作。在移动过程中,我们通过mousemove和touchmove事件监听器来更新拖动控制器的位置,并计算新的数值。最后,在用户放开鼠标或手指时,我们使用mouseup和touchend事件监听器来结束拖动操作。

注意,我们在代码中通过检查事件的e.touches属性来区分当前的事件是PC端的鼠标事件还是移动端的触屏事件。在需要计算新的slider数值时,我们将范围限制在滑块的可用范围内。最后,我们通过updateSlider函数来实时更新滑块控制器和蓝色区域的大小和位置,以反映实时的数值变化。

3. 总结

本文介绍了如何用js实现兼容PC端和移动端的滑块拖动选择数字效果。通过自己编写拖动事件监听器,我们可以在PC端和移动端实现类似的可移动性交互效果,为用户提供更友好的界面体验。当然,这只是一个简单的例子。在实际应用中,需要根据实际情况对代码进行修改和优化,以适配各种环境和需求。