Ensure that the highlighted result is visible
When opening the dropdown, the highlighted result will not always be scrolled into view if it isn't already.
This commit is contained in:
parent
a728d948c1
commit
5dd5ad93a6
26
dist/js/select2.amd.full.js
vendored
26
dist/js/select2.amd.full.js
vendored
@ -333,6 +333,7 @@ define('select2/results',[
|
||||
self.$results.attr('aria-hidden', 'false');
|
||||
|
||||
self.setClasses();
|
||||
self.ensureHighlightVisible();
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
@ -469,6 +470,31 @@ define('select2/results',[
|
||||
});
|
||||
};
|
||||
|
||||
Results.prototype.ensureHighlightVisible = function () {
|
||||
var $highlighted = this.$results.find('.highlighted');
|
||||
|
||||
if ($highlighted.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $options = this.$results.find('[aria-selected]');
|
||||
|
||||
var currentIndex = $options.index($highlighted);
|
||||
|
||||
var currentOffset = this.$results.offset().top;
|
||||
var nextTop = $highlighted.offset().top;
|
||||
var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
|
||||
|
||||
var offsetDelta = nextTop - currentOffset;
|
||||
nextOffset -= $highlighted.outerHeight(false) * 2;
|
||||
|
||||
if (currentIndex <= 2) {
|
||||
this.$results.scrollTop(0);
|
||||
} else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
|
||||
this.$results.scrollTop(nextOffset);
|
||||
}
|
||||
};
|
||||
|
||||
return Results;
|
||||
});
|
||||
|
||||
|
26
dist/js/select2.amd.js
vendored
26
dist/js/select2.amd.js
vendored
@ -333,6 +333,7 @@ define('select2/results',[
|
||||
self.$results.attr('aria-hidden', 'false');
|
||||
|
||||
self.setClasses();
|
||||
self.ensureHighlightVisible();
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
@ -469,6 +470,31 @@ define('select2/results',[
|
||||
});
|
||||
};
|
||||
|
||||
Results.prototype.ensureHighlightVisible = function () {
|
||||
var $highlighted = this.$results.find('.highlighted');
|
||||
|
||||
if ($highlighted.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $options = this.$results.find('[aria-selected]');
|
||||
|
||||
var currentIndex = $options.index($highlighted);
|
||||
|
||||
var currentOffset = this.$results.offset().top;
|
||||
var nextTop = $highlighted.offset().top;
|
||||
var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
|
||||
|
||||
var offsetDelta = nextTop - currentOffset;
|
||||
nextOffset -= $highlighted.outerHeight(false) * 2;
|
||||
|
||||
if (currentIndex <= 2) {
|
||||
this.$results.scrollTop(0);
|
||||
} else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
|
||||
this.$results.scrollTop(nextOffset);
|
||||
}
|
||||
};
|
||||
|
||||
return Results;
|
||||
});
|
||||
|
||||
|
26
dist/js/select2.full.js
vendored
26
dist/js/select2.full.js
vendored
@ -9871,6 +9871,7 @@ define('select2/results',[
|
||||
self.$results.attr('aria-hidden', 'false');
|
||||
|
||||
self.setClasses();
|
||||
self.ensureHighlightVisible();
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
@ -10007,6 +10008,31 @@ define('select2/results',[
|
||||
});
|
||||
};
|
||||
|
||||
Results.prototype.ensureHighlightVisible = function () {
|
||||
var $highlighted = this.$results.find('.highlighted');
|
||||
|
||||
if ($highlighted.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $options = this.$results.find('[aria-selected]');
|
||||
|
||||
var currentIndex = $options.index($highlighted);
|
||||
|
||||
var currentOffset = this.$results.offset().top;
|
||||
var nextTop = $highlighted.offset().top;
|
||||
var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
|
||||
|
||||
var offsetDelta = nextTop - currentOffset;
|
||||
nextOffset -= $highlighted.outerHeight(false) * 2;
|
||||
|
||||
if (currentIndex <= 2) {
|
||||
this.$results.scrollTop(0);
|
||||
} else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
|
||||
this.$results.scrollTop(nextOffset);
|
||||
}
|
||||
};
|
||||
|
||||
return Results;
|
||||
});
|
||||
|
||||
|
4
dist/js/select2.full.min.js
vendored
4
dist/js/select2.full.min.js
vendored
File diff suppressed because one or more lines are too long
26
dist/js/select2.js
vendored
26
dist/js/select2.js
vendored
@ -762,6 +762,7 @@ define('select2/results',[
|
||||
self.$results.attr('aria-hidden', 'false');
|
||||
|
||||
self.setClasses();
|
||||
self.ensureHighlightVisible();
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
@ -898,6 +899,31 @@ define('select2/results',[
|
||||
});
|
||||
};
|
||||
|
||||
Results.prototype.ensureHighlightVisible = function () {
|
||||
var $highlighted = this.$results.find('.highlighted');
|
||||
|
||||
if ($highlighted.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $options = this.$results.find('[aria-selected]');
|
||||
|
||||
var currentIndex = $options.index($highlighted);
|
||||
|
||||
var currentOffset = this.$results.offset().top;
|
||||
var nextTop = $highlighted.offset().top;
|
||||
var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
|
||||
|
||||
var offsetDelta = nextTop - currentOffset;
|
||||
nextOffset -= $highlighted.outerHeight(false) * 2;
|
||||
|
||||
if (currentIndex <= 2) {
|
||||
this.$results.scrollTop(0);
|
||||
} else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
|
||||
this.$results.scrollTop(nextOffset);
|
||||
}
|
||||
};
|
||||
|
||||
return Results;
|
||||
});
|
||||
|
||||
|
2
dist/js/select2.min.js
vendored
2
dist/js/select2.min.js
vendored
File diff suppressed because one or more lines are too long
26
src/js/select2/results.js
vendored
26
src/js/select2/results.js
vendored
@ -183,6 +183,7 @@ define([
|
||||
self.$results.attr('aria-hidden', 'false');
|
||||
|
||||
self.setClasses();
|
||||
self.ensureHighlightVisible();
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
@ -319,5 +320,30 @@ define([
|
||||
});
|
||||
};
|
||||
|
||||
Results.prototype.ensureHighlightVisible = function () {
|
||||
var $highlighted = this.$results.find('.highlighted');
|
||||
|
||||
if ($highlighted.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $options = this.$results.find('[aria-selected]');
|
||||
|
||||
var currentIndex = $options.index($highlighted);
|
||||
|
||||
var currentOffset = this.$results.offset().top;
|
||||
var nextTop = $highlighted.offset().top;
|
||||
var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
|
||||
|
||||
var offsetDelta = nextTop - currentOffset;
|
||||
nextOffset -= $highlighted.outerHeight(false) * 2;
|
||||
|
||||
if (currentIndex <= 2) {
|
||||
this.$results.scrollTop(0);
|
||||
} else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
|
||||
this.$results.scrollTop(nextOffset);
|
||||
}
|
||||
};
|
||||
|
||||
return Results;
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user