Skip to content

Commit 380e273

Browse files
committed
Improved Engine
Added OnDragStop callback Added new properties
1 parent 18fe139 commit 380e273

File tree

3 files changed

+79
-40
lines changed

3 files changed

+79
-40
lines changed

css/letmescroll.css

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,20 @@ Made by: Bruno Vieira
1616
margin: 0 auto;
1717
position: relative;
1818
overflow: hidden;
19-
padding-right: 24px;
19+
padding-right: 15px;
2020
max-width: 99%; /* 1% is for the scrollbar div */
2121
}
2222

23-
.lms_scrollable.lms_showScroll::after {
23+
.lms_scroll_track
24+
{
25+
background: var(--lms_scrollpath_bg);
26+
border-radius: var(--lms_scrollpath_radius);
27+
width: 8px;
2428
position: absolute;
25-
content: '';
26-
top: 0%;
27-
right: 3px;
29+
right: 0px;
2830
height: 100%;
29-
width: 8px;
30-
background: var(--lms_scrollpath_bg);
31-
border-radius: var(--lms_scrollpath_radius);
31+
top: 0px;
32+
transition: opacity 0.5s ease;
3233
}
3334

3435
.lms_scrollable .lms_content_wrapper {
@@ -45,14 +46,13 @@ Made by: Bruno Vieira
4546
}
4647

4748
.lms_scroller {
49+
cursor: default;
4850
z-index: 5;
49-
cursor: pointer;
5051
position: absolute;
51-
width: 8px;
52+
width: 100%;
5253
border-radius: var(--lms_scrollbar_radius);
5354
background: var(--lms_scrollbar_bg);
5455
top: 0px;
55-
right: 3px;
5656
-webkit-transition: top .08s;
5757
-moz-transition: top .08s;
5858
-ms-transition: top .08s;

demo/index.html

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
<div class="row">
8484
<div class="col-lg-12" style="border-bottom: 1px solid #1c2939; margin-bottom: 60px;">
8585
<div class="mb-5 mb-lg-0 mb-lg-3" style="text-align:center; margin-top:70px; margin-bottom:28px!important;">
86-
<img src="https://raw.githubusercontent.com/BMSVieira/letmescroll.js/main/demo/img/letmescroll.png" style="max-width:600px; width:40%;">
86+
<img src="https://raw.githubusercontent.com/BMSVieira/letmescroll.js/main/demo/img/letmescroll.png" style="max-width:600px; width:40%;">
8787
<p style=" font-size: 32pt; color: white; font-family: 'Cairo', sans-serif;">Scroll made easy!</p>
8888
<a href="https://github.com/BMSVieira/letmescroll.js" target="_blank" style="cursor:pointer;" class="btn btn-dark btn-sm">View on Github</a>
8989
</div>
@@ -171,7 +171,8 @@ <h3>Super easy-to-use scrollbar</h3>
171171
height : "300px"
172172
},
173173
scroll : {
174-
bottomOffset: 0
174+
bottomOffset: 0,
175+
autoHide: true
175176
}
176177
},
177178
onEnd: function(){
@@ -185,6 +186,9 @@ <h3>Super easy-to-use scrollbar</h3>
185186
},
186187
onDragStart: function(){
187188
document.getElementById("lms_console").insertAdjacentHTML("afterbegin", "<p class='pre_started'><b style='color:#ededed'>onDragStart:</b> Drag has started.</p>");
189+
},
190+
onDragStop: function(){
191+
document.getElementById("lms_console").insertAdjacentHTML("afterbegin", "<p class='pre_stopped'><b style='color:#ededed'>onDragStop:</b> Drag has stopped.</p>");
188192
}
189193
});
190194
});

js/letmescroll.js

Lines changed: 62 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ class LetMeScroll {
1616
height : "500px"
1717
},
1818
scroll : {
19-
bottomOffset: 0
19+
bottomOffset: 0,
20+
autoHide: false
2021
}
2122
},
2223
onEnd: function(){},
2324
onTop: function(){},
2425
onMove: function(){},
25-
onDragStart: function(){}
26+
onDragStart: function(){},
27+
onDragStop: function(){}
2628
};
2729

2830
// Scroll Random ID
@@ -70,6 +72,13 @@ class LetMeScroll {
7072
}
7173
}
7274

75+
/*
76+
** Hide Elements
77+
*/
78+
var hideElement = this.hideElement = function hideElement(element, value) {
79+
element.style.opacity = value;
80+
}
81+
7382
/*
7483
** Calculate Scrollbar Height
7584
*/
@@ -147,7 +156,6 @@ class LetMeScroll {
147156
// oTop callback()
148157
if(evt.target.scrollTop <= 0){ if (typeof _this.onTop == "function") { _this.onTop(); } }
149158

150-
151159
}
152160

153161
/*
@@ -169,7 +177,13 @@ class LetMeScroll {
169177
var stopDrag = this.stopDrag = function stopDrag(evt) {
170178

171179
// Dispatch event when drag is stoppped
172-
scrollerBeingDragged = false;
180+
if(scrollerBeingDragged == true)
181+
{
182+
scrollerBeingDragged = false;
183+
// OnDragStop callback()
184+
if (typeof _this.onDragStop == "function") { _this.onDragStop(); }
185+
}
186+
173187
}
174188

175189
/*
@@ -223,48 +237,69 @@ class LetMeScroll {
223237
let selectorElementHTML = selectorElement.innerHTML;
224238
selectorElement.innerHTML = "";
225239

226-
// Criar uma div e colocar la todo o conteudo
240+
// Creates div main div
227241
selectorElement.insertAdjacentHTML("afterbegin", "<div id='scroll_inner_"+randomID+"' class='lms_content_wrapper'></div>");
228242
let scrollInner = document.getElementById("scroll_inner_"+randomID);
229243

230-
scrollInner.insertAdjacentHTML("afterbegin", "<div id='scroll_content_"+randomID+"' class='lms_content'></div>");
244+
// Creates div and track div
245+
scrollInner.insertAdjacentHTML("afterbegin", "<div id='scroll_content_"+randomID+"' class='lms_content'></div> <div id='lms_track_"+randomID+"' class='lms_scroll_track'></div>");
231246
let scrollContent = document.getElementById("scroll_content_"+randomID);
247+
let scrollTrack = document.getElementById("lms_track_"+randomID);
248+
249+
// Content from original elements into the created elements
232250
scrollContent.innerHTML = selectorElementHTML;
233251

252+
// Define variables from new elements
253+
this.scrollTrack = scrollTrack;
234254
this.scrollElement = scrollInner;
235255
this.scrollContent = scrollContent;
236256
this.mainElement = selectorElement;
237257

238258
scrollContainer = selectorElement;
239259
scrollContentWrapper = scrollInner;
240260

261+
// Calculate scrollbar height
262+
scrollerHeight = calculateScrollerHeight();
263+
264+
// Check if scrollbar is needed based on height
265+
if (scrollerHeight / scrollContainer.offsetHeight < 1){
266+
241267
// Creat scrollbar div
242-
scroller = document.createElement("div");
243-
scroller.className = 'lms_scroller';
268+
scrollTrack.insertAdjacentHTML("beforeend", "<div id='lms_scroller_"+randomID+"' class='lms_scroller'></div>");
269+
scroller = document.getElementById("lms_scroller_"+randomID);
244270
this.scroller = scroller;
245271

246-
// Calculate scrollbar height
247-
scrollerHeight = calculateScrollerHeight();
272+
// Apply scrollbar height
273+
scroller.style.height = scrollerHeight + 'px';
274+
275+
// Show scroll path divot
276+
scrollContainer.className += ' lms_showScroll';
248277

249-
if (scrollerHeight / scrollContainer.offsetHeight < 1){
250-
251-
// Apply scrollbar height
252-
scroller.style.height = scrollerHeight + 'px';
278+
// Attach related draggable listeners
279+
scroller.addEventListener('mousedown', startDrag);
280+
window.addEventListener('mouseup', stopDrag);
281+
window.addEventListener('mousemove', scrollBarScroll);
282+
}
283+
284+
// Add global listeners
285+
scrollContentWrapper.addEventListener('scroll', moveScroller);
253286

254-
// Append scroller to scrollContainer div
255-
scrollContainer.appendChild(scroller);
256-
257-
// Show scroll path divot
258-
scrollContainer.className += ' lms_showScroll';
259-
260-
// Attach related draggable listeners
261-
scroller.addEventListener('mousedown', startDrag);
262-
window.addEventListener('mouseup', stopDrag);
263-
window.addEventListener('mousemove', scrollBarScroll);
287+
// Check if options are available
288+
if(options.config.scroll.autoHide == true)
289+
{
290+
this.hideElement(scroller, 0);
291+
if(!androidOrIOS()) // Check if it is mobile
292+
{
293+
scrollContainer.addEventListener("mouseover", function(){ _this.hideElement(scroller, 1); });
294+
scrollContainer.addEventListener("mouseout", function(){ _this.hideElement(scroller, 0); });
295+
} else {
296+
scrollContainer.addEventListener("touchstart", function(){ _this.hideElement(scroller, 1); });
297+
scrollContainer.addEventListener("touchend", function(){ _this.hideElement(scroller, 0); });
264298
}
265-
266-
// *** Listeners ***
267-
scrollContentWrapper.addEventListener('scroll', moveScroller);
299+
300+
}
301+
302+
268303
}
269304

270305
// Init

0 commit comments

Comments
 (0)