一:创建key_up_down.js文件
(function ($) {
$.fn.extend({
keyUpDown: function (options) {
if (!isValid(options))
{
return this;
}
var opts = $.extend({}, options);
$(this).keydown(function(event){
var cur_time = new Date().getTime();
//控制点击速度,防止连续点击,可删除
if (cur_time - pre_time > 100)
{
pre_time = cur_time;
if (event.keyCode == 38) //键盘上键
{
$(this).find("." + opts.item_class).each(function (index, item) {
if ($(this).hasClass(opts.active_class) && index > 0)
{
$(this).removeClass(opts.active_class);
$(this).prev().addClass(opts.active_class);
scrollVisible($(this).prev(),'up');
}
});
}
else if (event.keyCode == 40) //键盘下键
{
var leng = $(this).find("." + opts.item_class).length;
$(this).find("." + opts.item_class).each(function (index, item) {
if ($(this).hasClass(opts.active_class) && index < leng-1)
{
$(this).removeClass(opts.active_class);
$(this).next().addClass(opts.active_class);
scrollVisible($(this).next(),'down');
return false;
}
});
}
}
});
}
});
function isValid(options) {
if (!options)
{
return false;
}
if ( typeof options !== "object")
{
return false;
}
if (!options.hasOwnProperty('item_class') || !options.hasOwnProperty('active_class'))
{
return false;
}
return true;
}
function scrollVisible(item, type)
{
var firstOffset = item.siblings(":first").offset();
var itemOfsset = item.offset();
var itemHeight = item.prop("scrollHeight");
var scrollHeight = item.parent().height();
var scrollTop = item.parent().scrollTop();
var diffTop = itemOfsset.top-firstOffset.top;
if (type == 'down')
{
if (diffTop+itemHeight > scrollHeight)
{
item.parent().scrollTop(diffTop+itemHeight-scrollHeight);
}
}
else
{
if (diffTop < scrollTop)
{
item.parent().scrollTop(diffTop);
}
}
}
var pre_time = 0;
})(window.jQuery);
二:页面引入
<script>
$('body').keyUpDown({
item_class : 'list_a',
active_class : 'layui-this'
});
</script>
三:html列表
<div class="floating-scroll">
<a class="list_a layui-this">列表1</a>
<a class="list_a ">列表2</a>
<a class="list_a ">列表3</a>
<a class="list_a ">列表4</a>
<a class="list_a ">列表5</a>
<a class="list_a ">列表6</a>
<a class="list_a ">列表7</a>
<a class="list_a ">列表8</a>
<a class="list_a ">列表9</a>
<a class="list_a ">列表10</a>
</div>