mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
stickyNav item in a subcomponent
This commit is contained in:
parent
771b9eb616
commit
d35e1fe21e
@ -37,12 +37,16 @@ const messages = {
|
|||||||
ok: "OK",
|
ok: "OK",
|
||||||
cancel: "Annuler",
|
cancel: "Annuler",
|
||||||
close: "Fermer",
|
close: "Fermer",
|
||||||
next: "Suivant",
|
|
||||||
previous: "Précédent",
|
|
||||||
back: "Retour",
|
back: "Retour",
|
||||||
check_all: "cocher tout",
|
check_all: "cocher tout",
|
||||||
reset: "réinitialiser"
|
reset: "réinitialiser"
|
||||||
},
|
},
|
||||||
|
nav: {
|
||||||
|
next: "Suivant",
|
||||||
|
previous: "Précédent",
|
||||||
|
top: "Haut",
|
||||||
|
bottom: "Bas",
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4,39 +4,17 @@
|
|||||||
<nav>
|
<nav>
|
||||||
<a href="#top">
|
<a href="#top">
|
||||||
<i class="fa fa-fw fa-square-o"></i>
|
<i class="fa fa-fw fa-square-o"></i>
|
||||||
<span>Haut</span>
|
<span>{{ $t('nav.top') }}</span>
|
||||||
</a>
|
|
||||||
<a href="#section-10" :class="{ 'active': isActive }">
|
|
||||||
<i class="fa fa-fw fa-square"></i>
|
|
||||||
<span>1</span>
|
|
||||||
</a>
|
|
||||||
<a href="#section-20" :class="{ 'active': isActive }">
|
|
||||||
<i class="fa fa-fw fa-square"></i>
|
|
||||||
<span>2</span>
|
|
||||||
</a>
|
|
||||||
<a href="#section-30" :class="{ 'active': isActive }">
|
|
||||||
<i class="fa fa-fw fa-square"></i>
|
|
||||||
<span>3</span>
|
|
||||||
</a>
|
|
||||||
<a href="#section-40" :class="{ 'active': isActive }">
|
|
||||||
<i class="fa fa-fw fa-square"></i>
|
|
||||||
<span>4</span>
|
|
||||||
</a>
|
|
||||||
<a href="#section-50" :class="{ 'active': isActive }">
|
|
||||||
<i class="fa fa-fw fa-square"></i>
|
|
||||||
<span>5</span>
|
|
||||||
</a>
|
|
||||||
<a href="#section-60" v-if="accompanyingCourse.step === 'DRAFT'" :class="{ 'active': isActive }">
|
|
||||||
<i class="fa fa-fw fa-square"></i>
|
|
||||||
<span>6</span>
|
|
||||||
</a>
|
|
||||||
<a href="#section-70" v-if="accompanyingCourse.step === 'DRAFT'" :class="{ 'active': isActive }">
|
|
||||||
<i class="fa fa-fw fa-square"></i>
|
|
||||||
<span>7</span>
|
|
||||||
</a>
|
</a>
|
||||||
|
<item
|
||||||
|
v-for="item of items"
|
||||||
|
:key="item.key"
|
||||||
|
:item="item"
|
||||||
|
:step="step">
|
||||||
|
</item>
|
||||||
<!--a href="#bottom">
|
<!--a href="#bottom">
|
||||||
<i class="fa fa-fw fa-square-o"></i>
|
<i class="fa fa-fw fa-square-o"></i>
|
||||||
<span>Bas</span>
|
<span>{{ $t('nav.bottom') }}</span>
|
||||||
</a-->
|
</a-->
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
@ -44,23 +22,31 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import Item from './StickyNav/Item.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "StickyNav",
|
name: "StickyNav",
|
||||||
|
components: {
|
||||||
|
Item
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
header: document.querySelector("header.navigation.container"),
|
header: document.querySelector("header.navigation.container"),
|
||||||
bannerName: document.querySelector("#header-accompanying_course-name"),
|
bannerName: document.querySelector("#header-accompanying_course-name"),
|
||||||
bannerDetails: document.querySelector("#header-accompanying_course-details"),
|
bannerDetails: document.querySelector("#header-accompanying_course-details"),
|
||||||
stickyNav: null,
|
|
||||||
anchors: null,
|
|
||||||
sumBanner: null,
|
sumBanner: null,
|
||||||
limit: 25
|
stickyNav: null,
|
||||||
|
limit: 25,
|
||||||
|
anchors: null,
|
||||||
|
items: [],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
accompanyingCourse() {
|
accompanyingCourse() {
|
||||||
return this.$store.state.accompanyingCourse
|
return this.$store.state.accompanyingCourse;
|
||||||
|
},
|
||||||
|
step() {
|
||||||
|
return this.accompanyingCourse.step;
|
||||||
},
|
},
|
||||||
top() {
|
top() {
|
||||||
return parseInt(window.getComputedStyle(this.stickyNav).getPropertyValue('top').slice(0, -2));
|
return parseInt(window.getComputedStyle(this.stickyNav).getPropertyValue('top').slice(0, -2));
|
||||||
@ -96,6 +82,21 @@ export default {
|
|||||||
resizeObserver.observe(this.bannerName);
|
resizeObserver.observe(this.bannerName);
|
||||||
resizeObserver.observe(this.bannerDetails);
|
resizeObserver.observe(this.bannerDetails);
|
||||||
|
|
||||||
|
},
|
||||||
|
anchorsMap() {
|
||||||
|
|
||||||
|
this.anchors = document.querySelectorAll("h2 a[name^='section']");
|
||||||
|
this.anchors.forEach(anchor => {
|
||||||
|
//console.log('anchor', anchor);
|
||||||
|
this.items.push({
|
||||||
|
pos: this.findPosition(anchor)['y'],
|
||||||
|
key: parseInt(anchor.name.slice(8).slice(0, -1)),
|
||||||
|
name: '#' + anchor.name,
|
||||||
|
anchor: anchor
|
||||||
|
})
|
||||||
|
});
|
||||||
|
//console.log('items', this.items);
|
||||||
|
|
||||||
},
|
},
|
||||||
handleScroll(event) {
|
handleScroll(event) {
|
||||||
|
|
||||||
@ -130,14 +131,6 @@ export default {
|
|||||||
|
|
||||||
return pos;
|
return pos;
|
||||||
},
|
},
|
||||||
anchorsMap() {
|
|
||||||
|
|
||||||
this.anchors = document.querySelectorAll("h2 a[name^='section']");
|
|
||||||
this.anchors.forEach(anchor => {
|
|
||||||
console.log('anchor', this.findPosition(anchor)['y']);
|
|
||||||
});
|
|
||||||
|
|
||||||
},
|
|
||||||
isActive() {
|
isActive() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -145,7 +138,7 @@ export default {
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss">
|
||||||
div#navmap {
|
div#navmap {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 30px;
|
top: 30px;
|
||||||
@ -160,9 +153,6 @@ div#navmap {
|
|||||||
span {
|
span {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
&:hover {
|
|
||||||
color: #718596b5;
|
|
||||||
}
|
|
||||||
&:hover,
|
&:hover,
|
||||||
&.active {
|
&.active {
|
||||||
span {
|
span {
|
||||||
@ -170,6 +160,9 @@ div#navmap {
|
|||||||
padding-left: 8px;
|
padding-left: 8px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
&:hover {
|
||||||
|
color: #718596b5;
|
||||||
|
}
|
||||||
&.active {
|
&.active {
|
||||||
color: #df6a27; //#e2793d
|
color: #df6a27; //#e2793d
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
<template>
|
||||||
|
<a
|
||||||
|
v-if="item.key <= 5"
|
||||||
|
:href="item.name"
|
||||||
|
:class="{ 'active': isActive }"
|
||||||
|
>
|
||||||
|
<i class="fa fa-fw fa-square"></i>
|
||||||
|
<span>{{ item.key }}</span>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
v-else-if="step === 'DRAFT'"
|
||||||
|
:href="item.name"
|
||||||
|
:class="{ 'active': isActive }"
|
||||||
|
>
|
||||||
|
<i class="fa fa-fw fa-square"></i>
|
||||||
|
<span>{{ item.key }}</span>
|
||||||
|
</a>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "Item",
|
||||||
|
props: ['item', 'step'],
|
||||||
|
computed: {
|
||||||
|
isActive() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="css" scoped>
|
||||||
|
</style>
|
Loading…
x
Reference in New Issue
Block a user