这是一个(非常)简单的 jQuery 插件,可以模拟您所追求的内容(对于整数)。我将把它扩展为处理浮点数作为你的练习。
JSFiddle 为 http://jsfiddle.net/yRmHS/3/ 处的光标添加了 CSS
jQuery.fn.slidingInput = function (opts) {
var defaults = {
step: 1, // Increment value
min: 0, // Minimum value
max: 100, // Maximum value
tolerance: 2 // Mouse movement allowed within a simple click
};
return this.each(function () {
var $el = $(this),
options = $.extend({}, defaults, opts, this),
distance = 0,
initialValue = 0;
function mouseDown () {
distance = 0;
initialValue = parseInt($el.val(), 10);
$(document).on('mousemove', mouseMove).on('mouseup', mouseUp);
return false;
}
function mouseMove (e) {
var currentValue = parseInt($el.val(), 10),
event = e.originalEvent,
movementX = event.movementX || event.webkitMovementX || event.mozMovementX || 0,
movementY = event.movementY || event.webkitMovementY || event.mozMovementY || 0;
distance += (movementX - movementY) * options.step;
$el.val(Math.min(options.max, Math.max(initialValue + distance, options.min)));
}
function mouseUp () {
$(document).off('mousemove mouseup');
if (Math.abs(distance) < options.tolerance) {
$el.focus();
}
}
$el.on('mousedown', mouseDown);
});
};
// How to use it
$(function () {
// Initialise plugin
// HTML sample: <input type="number" class="slidable" step="2" value="50" min="0" max="100" />
$('.slidable').slidingInput();
// Accepts options object that override defaults, but step/min/max on input override options
/*
$('.slidable').slidingInput({
step: 1,
min: 0,
max: 100,
tolerance: 2
});
*/
});