Skip to content

Commit 969d55f

Browse files
committed
Changed how active-class is added on scroll
1 parent a39ef41 commit 969d55f

File tree

4 files changed

+23
-67
lines changed

4 files changed

+23
-67
lines changed

dist/vue-scrollactive.js

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,9 @@ exports.default = {
660660

661661
methods: {
662662
onScroll: function onScroll() {
663+
var distanceFromTop = window.scrollY;
664+
var currentItem = void 0;
665+
663666
var _iteratorNormalCompletion = true;
664667
var _didIteratorError = false;
665668
var _iteratorError = undefined;
@@ -668,12 +671,11 @@ exports.default = {
668671
for (var _iterator = (0, _getIterator3.default)(this.scrollactiveItems), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
669672
var scrollactiveItem = _step.value;
670673

674+
scrollactiveItem.classList.remove(this.activeClass);
671675
var target = document.getElementById(scrollactiveItem.hash.substr(1));
672676

673-
if (this.isWindowInsideTarget(target)) {
674-
scrollactiveItem.classList.add(this.activeClass);
675-
} else {
676-
scrollactiveItem.classList.remove(this.activeClass);
677+
if (distanceFromTop >= target.offsetTop - this.offset) {
678+
currentItem = scrollactiveItem;
677679
}
678680
}
679681
} catch (err) {
@@ -690,25 +692,8 @@ exports.default = {
690692
}
691693
}
692694
}
693-
},
694-
695-
696-
/**
697-
* Verifies if the window is inside the target section.
698-
*
699-
* @param target [Section element]
700-
* @return {Boolean}
701-
*/
702-
isWindowInsideTarget: function isWindowInsideTarget(target) {
703-
var distanceFromTop = window.scrollY;
704-
var targetDistanceFromTop = target.offsetTop;
705-
var targetHeight = target.offsetHeight;
706-
707-
if (targetDistanceFromTop - this.offset <= distanceFromTop && targetDistanceFromTop + targetHeight - this.offset > distanceFromTop) {
708-
return true;
709-
}
710695

711-
return false;
696+
if (currentItem) currentItem.classList.add(this.activeClass);
712697
},
713698
setScrollactiveItems: function setScrollactiveItems() {
714699
var scrollactiveItems = document.querySelectorAll('.scrollactive-item');

dist/vue-scrollactive.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/assets/main.js

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,9 @@ exports.default = {
774774

775775
methods: {
776776
onScroll: function onScroll() {
777+
var distanceFromTop = window.scrollY;
778+
var currentItem = void 0;
779+
777780
var _iteratorNormalCompletion = true;
778781
var _didIteratorError = false;
779782
var _iteratorError = undefined;
@@ -782,12 +785,11 @@ exports.default = {
782785
for (var _iterator = (0, _getIterator3.default)(this.scrollactiveItems), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
783786
var scrollactiveItem = _step.value;
784787

788+
scrollactiveItem.classList.remove(this.activeClass);
785789
var target = document.getElementById(scrollactiveItem.hash.substr(1));
786790

787-
if (this.isWindowInsideTarget(target)) {
788-
scrollactiveItem.classList.add(this.activeClass);
789-
} else {
790-
scrollactiveItem.classList.remove(this.activeClass);
791+
if (distanceFromTop >= target.offsetTop - this.offset) {
792+
currentItem = scrollactiveItem;
791793
}
792794
}
793795
} catch (err) {
@@ -804,25 +806,8 @@ exports.default = {
804806
}
805807
}
806808
}
807-
},
808-
809-
810-
/**
811-
* Verifies if the window is inside the target section.
812-
*
813-
* @param target [Section element]
814-
* @return {Boolean}
815-
*/
816-
isWindowInsideTarget: function isWindowInsideTarget(target) {
817-
var distanceFromTop = window.scrollY;
818-
var targetDistanceFromTop = target.offsetTop;
819-
var targetHeight = target.offsetHeight;
820-
821-
if (targetDistanceFromTop - this.offset <= distanceFromTop && targetDistanceFromTop + targetHeight - this.offset > distanceFromTop) {
822-
return true;
823-
}
824809

825-
return false;
810+
if (currentItem) currentItem.classList.add(this.activeClass);
826811
},
827812
setScrollactiveItems: function setScrollactiveItems() {
828813
var scrollactiveItems = document.querySelectorAll('.scrollactive-item');

src/scrollactive.vue

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
data() {
8888
return {
8989
scrollactiveItems: null,
90-
bezierEasing: require('bezier-easing')
90+
bezierEasing: require('bezier-easing'),
9191
}
9292
},
9393
@@ -104,33 +104,19 @@
104104
105105
methods: {
106106
onScroll() {
107+
let distanceFromTop = window.scrollY;
108+
let currentItem;
109+
107110
for (let scrollactiveItem of this.scrollactiveItems) {
111+
scrollactiveItem.classList.remove(this.activeClass);
108112
let target = document.getElementById(scrollactiveItem.hash.substr(1));
109113
110-
if (this.isWindowInsideTarget(target)) {
111-
scrollactiveItem.classList.add(this.activeClass);
112-
} else {
113-
scrollactiveItem.classList.remove(this.activeClass);
114+
if (distanceFromTop >= target.offsetTop - this.offset) {
115+
currentItem = scrollactiveItem;
114116
}
115117
}
116-
},
117-
118-
/**
119-
* Verifies if the window is inside the target section.
120-
*
121-
* @param target [Section element]
122-
* @return {Boolean}
123-
*/
124-
isWindowInsideTarget(target) {
125-
let distanceFromTop = window.scrollY;
126-
let targetDistanceFromTop = target.offsetTop;
127-
let targetHeight = target.offsetHeight;
128-
129-
if (targetDistanceFromTop - this.offset <= distanceFromTop && targetDistanceFromTop + targetHeight - this.offset > distanceFromTop) {
130-
return true;
131-
}
132118
133-
return false;
119+
if (currentItem) currentItem.classList.add(this.activeClass);
134120
},
135121
136122
setScrollactiveItems() {

0 commit comments

Comments
 (0)