mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-21 01:25:55 +02:00
Implemented scroll to top using stimulus.
This commit is contained in:
parent
8ccf5652ab
commit
1f890efc97
3 changed files with 30 additions and 27 deletions
27
assets/controllers/common/back_to_top_controller.js
Normal file
27
assets/controllers/common/back_to_top_controller.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
import {Controller} from "@hotwired/stimulus";
|
||||
import {Tooltip} from "bootstrap";
|
||||
|
||||
export default class extends Controller {
|
||||
|
||||
connect() {
|
||||
window.addEventListener('scroll', this._onscroll.bind(this));
|
||||
}
|
||||
|
||||
_onscroll() {
|
||||
const button = this.element;
|
||||
|
||||
if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) {
|
||||
button.style.display = "block";
|
||||
} else {
|
||||
button.style.display = "none";
|
||||
}
|
||||
}
|
||||
|
||||
backToTop() {
|
||||
//Hide button tooltip to prevent ugly tooltip on scroll
|
||||
Tooltip.getInstance(this.element)?.hide();
|
||||
|
||||
document.body.scrollTop = 0; // For Safari
|
||||
document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera
|
||||
}
|
||||
}
|
|
@ -7,13 +7,9 @@ import "bootstrap-fileinput/css/fileinput.css"
|
|||
|
||||
import "bootstrap-fileinput";
|
||||
|
||||
import {Popover} from "bootstrap";
|
||||
|
||||
|
||||
class RegisterEventHelper {
|
||||
constructor() {
|
||||
this.registerTooltips();
|
||||
this.registerJumpToTopBtn();
|
||||
this.registerFileInput();
|
||||
|
||||
this.registerSpecialCharInput();
|
||||
|
@ -39,26 +35,6 @@ class RegisterEventHelper {
|
|||
});
|
||||
}
|
||||
|
||||
registerJumpToTopBtn() {
|
||||
this.registerLoadHandler(() => {
|
||||
$(window).scroll(function () {
|
||||
if ($(this).scrollTop() > 50) {
|
||||
$('#back-to-top').fadeIn();
|
||||
} else {
|
||||
$('#back-to-top').fadeOut();
|
||||
}
|
||||
});
|
||||
// scroll body to 0px on click
|
||||
$('#back-to-top').click(function () {
|
||||
$('#back-to-top').tooltip('hide');
|
||||
$('body,html').animate({
|
||||
scrollTop: 0
|
||||
}, 800);
|
||||
return false;
|
||||
}).tooltip();
|
||||
});
|
||||
}
|
||||
|
||||
registerSpecialCharInput() {
|
||||
this.registerLoadHandler(() => {
|
||||
//@ts-ignore
|
||||
|
|
|
@ -107,10 +107,10 @@
|
|||
{# Back to top buton #}
|
||||
|
||||
<!-- Back to top button -->
|
||||
<a id="back-to-top" href="#" class="btn btn-primary back-to-top" role="button"
|
||||
title="{% trans %}back_to_top{% endtrans %}" data-bs-toggle="tooltip" data-placement="left">
|
||||
<button id="back-to-top" class="btn btn-primary back-to-top" role="button" title="{% trans %}back_to_top{% endtrans %}"
|
||||
{{ stimulus_controller('common/back_to_top') }} {{ stimulus_action('common/back_to_top', 'backToTop') }}>
|
||||
<i class="fas fa-angle-up fa-fw"></i>
|
||||
</a>
|
||||
</button>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue