Created
September 17, 2018 11:30
-
-
Save davidhellmann/3cb50ca1e394cfa340be8ac8a47c0fd5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <template> | |
| <div :class="`${cn}`"> | |
| <div :class="`${cn}__slider`" ref="sliderWrapper" @mousemove="setCursor"> | |
| <Navigation :class="`${cn}__navigation`"> | |
| asd | |
| </Navigation> | |
| <div :class="`${cn}__sliderSlide`" | |
| ref="sliderSlide" | |
| :style="`transform: translateX(${getLastXPosition}px);`"> | |
| <!-- Slider Content --> | |
| <slot/> | |
| </div> | |
| <RoomWrapperFrontDeskContent v-if="currentRoom === 'frontDesk'"/> | |
| <RoomWrapperLoungeContent v-if="currentRoom === 'lounge'"/> | |
| <RoomWrapperMeetingHRContent v-if="currentRoom === 'meetingHR'"/> | |
| <RoomWrapperDevOfficeContent v-if="currentRoom === 'devOffice'"/> | |
| <RoomWrapperRocketRoofContent v-if="currentRoom === 'rocketRoof'"/> | |
| <Link :text="siteContent.global.skipButton.text" | |
| :link="siteContent.global.skipButton.link" | |
| :modifiers="['primary', 'skip']"/> | |
| <router-link to="/" :class="`${cn}__home ${cn}__home--primary ${cn}__home--home`"> | |
| <span :class="`${cn}__home__text`"> | |
| ❮ | |
| </span> | |
| </router-link> | |
| </div> | |
| </div> | |
| </template> | |
| <script> | |
| // @ is an alias to /src | |
| import Navigation from '@/components/organisms/Navigation'; // eslint-disable-line | |
| import RoomWrapperFrontDeskContent from '@/components/organisms/RoomWrapperFrontDeskContent.vue'; | |
| import RoomWrapperLoungeContent from '@/components/organisms/RoomWrapperLoungeContent.vue'; | |
| import RoomWrapperDevOfficeContent from '@/components/organisms/RoomWrapperDevOfficeContent.vue'; | |
| import RoomWrapperMeetingHRContent from '@/components/organisms/RoomWrapperMeetingHRContent.vue'; | |
| import RoomWrapperRocketRoofContent from '@/components/organisms/RoomWrapperRocketRoofContent.vue'; | |
| import Link from '@/components/atoms/Link.vue'; | |
| import {mapState, mapMutations} from 'vuex'; | |
| import throttle from 'lodash/throttle'; | |
| import {TimelineMax} from 'gsap'; | |
| export default { | |
| name: 'RoomSlider', | |
| props: [], | |
| data() { | |
| return { | |
| cn: 'o-roomslider', | |
| w: null, | |
| d: null, | |
| e: null, | |
| g: null, | |
| slide: null, | |
| sliderWrapper: null, | |
| sliderWrapperWidth: null, | |
| resizeTimer: null, | |
| $dude: null, | |
| $room: null, | |
| clickArea: 0, | |
| clickAreaPX: 0, | |
| offset: null, | |
| nextDirection: 'no', | |
| mousePosition: 0, | |
| ww: 0, | |
| nextDudeDirection: 'right', | |
| walkingTime: 0, | |
| lastRoom: null, | |
| }; | |
| }, | |
| computed: { | |
| ...mapState([ | |
| 'currentRoom', | |
| 'slideWidth', | |
| 'windowWidth', | |
| 'xPosition', | |
| 'dudeWidthPX', | |
| 'dudePosition', | |
| 'dudePositionPX', | |
| 'roomWrapperWidth', | |
| 'clientPositionX', | |
| 'navOpen', | |
| 'currentEvent', | |
| 'layerIsOpen', | |
| 'siteContent', | |
| ]), | |
| getLastXPosition() { | |
| return this.xPosition; | |
| } | |
| }, | |
| methods: { | |
| ...mapMutations([ | |
| 'setSlideWidth', | |
| 'setWindowWidth', | |
| 'setXPosition', | |
| 'setDudeWidthPX', | |
| 'setDudePosition', | |
| 'setDudePositionPX', | |
| 'setRoomWrapperWidth', | |
| 'setClientPositionX', | |
| 'setNavOpen', | |
| 'setCurrentEvent' | |
| ]), | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | setCursor | |
| |-------------------------------------------------------------------------- | |
| */ | |
| setCursor: throttle(function (evt) { | |
| if (this.layerIsOpen) { | |
| return; | |
| } | |
| this.mousePosition = Math.round((evt.clientX * 100) / this.windowWidth); | |
| const targets = evt.path || (evt.composedPath && evt.composedPath()); | |
| const event = targets.find((e) => { | |
| const id = e.id; | |
| if (id && id.startsWith('evt')) { | |
| return id; | |
| } | |
| return false; | |
| }); | |
| document.body.classList.remove('is-funnyCursor--right'); | |
| document.body.classList.remove('is-funnyCursor--left'); | |
| document.body.classList.remove('is-funnyCursor--hand'); | |
| if (this.mousePosition <= this.clickArea) { | |
| document.body.classList.remove('is-funnyCursor--right'); | |
| if (this.xPosition < 0) { | |
| document.body.classList.add('is-funnyCursor--left'); | |
| } | |
| } else if (this.mousePosition >= (100 - this.clickArea)) { | |
| document.body.classList.remove('is-funnyCursor--left'); | |
| if ((Math.abs(this.xPosition) + this.windowWidth) < this.slideWidth) { | |
| document.body.classList.add('is-funnyCursor--right'); | |
| } | |
| } else { | |
| document.body.classList.remove('is-funnyCursor--right'); | |
| document.body.classList.remove('is-funnyCursor--left'); | |
| } | |
| if (event) { | |
| document.body.classList.add('is-funnyCursor--hand'); | |
| if ( | |
| document.body.classList.contains('is-funnyCursor--left') | |
| || document.body.classList.contains('is-funnyCursor--right') | |
| ) { | |
| document.body.classList.remove('is-funnyCursor--hand'); | |
| } | |
| } | |
| }, 250), | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | setSlideWidth | |
| |-------------------------------------------------------------------------- | |
| */ | |
| setSlideWidth() { | |
| this.$store.commit('setSlideWidth', Math.round(this.slide.clientWidth)); | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | setWindowWidth | |
| |-------------------------------------------------------------------------- | |
| */ | |
| setWindowWidth() { | |
| const setWindowWidth = Math.round(this.w.innerWidth) || Math.round(this.e.clientWidth); | |
| this.$store.commit('setWindowWidth', setWindowWidth); | |
| const roomWrapperWidth = Math.round(this.sliderWrapper.getBoundingClientRect().width); | |
| this.$store.commit('setRoomWrapperWidth', roomWrapperWidth); | |
| // this.offset = Math.round(this.windowWidth * 0.04); | |
| this.offset = 0; | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | setSliderWidth | |
| |-------------------------------------------------------------------------- | |
| */ | |
| setSliderWidth() { | |
| if (this.roomWrapperWidth >= this.slideWidth) { | |
| this.sliderWrapper.style.width = `${this.slideWidth}px`; | |
| } else { | |
| this.sliderWrapper.style.width = '100%'; | |
| } | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | setClickArea | |
| |-------------------------------------------------------------------------- | |
| */ | |
| setClickArea() { | |
| this.clickArea = 24; | |
| if (this.windowWidth >= 1000) { | |
| this.clickArea = 12; | |
| } | |
| this.clickAreaPX = (this.roomWrapperWidth * this.clickArea) / 100; | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | getDomElements | |
| |-------------------------------------------------------------------------- | |
| */ | |
| getDomElements() { | |
| this.slide = this.$refs.sliderSlide; | |
| this.sliderWrapper = this.$refs.sliderWrapper; | |
| this.w = window; | |
| this.d = document; | |
| this.e = this.d.documentElement; | |
| [this.g] = this.d.getElementsByTagName('body'); | |
| this.$dude = document.querySelector('.o-roomWrapper__dude'); | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | setVariables | |
| |-------------------------------------------------------------------------- | |
| */ | |
| setVariables() { | |
| this.setWindowWidth(); | |
| this.setSlideWidth(); | |
| this.setClickArea(); | |
| this.setSliderWidth(); | |
| this.getDudeWidth(); | |
| document.body.setAttribute('data-currentRoom', this.currentRoom); | |
| document.body.removeAttribute('data-action'); | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | setNextSlideDirection | |
| |-------------------------------------------------------------------------- | |
| */ | |
| setNextSlideDirection() { | |
| const leftArea = Math.round(Math.abs(this.xPosition) + this.clickAreaPX); | |
| const rightArea = Math.round((Math.abs(this.xPosition) + this.roomWrapperWidth) - this.clickAreaPX); | |
| if (this.clientPositionX <= leftArea && this.xPosition < 0) { | |
| this.nextDirection = 'left'; | |
| } else if (this.clientPositionX >= rightArea && (Math.abs(this.xPosition) + this.windowWidth) < this.slideWidth) { | |
| this.nextDirection = 'right'; | |
| } else { | |
| this.nextDirection = 'no'; | |
| } | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | moveSlid | |
| |-------------------------------------------------------------------------- | |
| */ | |
| moveSlide(direction, value, skip) { | |
| let xPosition = this.xPosition; | |
| if (!skip) { | |
| if (direction === 'left') { | |
| if (this.xPosition >= 0) { | |
| return; | |
| } | |
| xPosition = this.xPosition + (this.roomWrapperWidth / 4); | |
| if (Math.abs(this.xPosition) < this.roomWrapperWidth / 4) { | |
| xPosition = 0; | |
| } | |
| } | |
| if (direction === 'right') { | |
| if (Math.abs(this.xPosition) >= this.sliderWrapper) { | |
| return; | |
| } | |
| if (this.slideWidth - (Math.abs(this.xPosition) + (this.roomWrapperWidth / 4)) <= this.roomWrapperWidth) { | |
| xPosition = -(this.slideWidth - this.roomWrapperWidth); | |
| } else { | |
| xPosition = this.xPosition - (this.roomWrapperWidth / 4); | |
| } | |
| } | |
| } | |
| this.slide.style.transitionDuration = '1s'; | |
| if (value) { | |
| this.slide.style.transitionDuration = '0s'; | |
| xPosition = value; | |
| } | |
| this.slide.style.transform = `translateX(${xPosition}px)`; | |
| this.$store.commit('setXPosition', xPosition); | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | resetSlider | |
| |-------------------------------------------------------------------------- | |
| */ | |
| resetSlider() { | |
| // this.moveDude(50, true); | |
| this.$store.commit('setXPosition', 0); | |
| this.slide.style.transitionDuration = '0s'; | |
| this.slide.style.transform = `translateX(${this.xPosition}px)`; | |
| this.slide.style.transitionDuration = '1s'; | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | getDudeWidth | |
| |-------------------------------------------------------------------------- | |
| */ | |
| getDudeWidth() { | |
| this.$store.commit('setDudeWidthPX', Math.round(this.$dude.getBoundingClientRect().width)); | |
| }, | |
| getVisibleRoomRange() { | |
| const fromValue = Math.round(((Math.abs(this.xPosition) * 100) / this.slideWidth)); | |
| const toValue = Math.round((((Math.abs(this.xPosition) + this.roomWrapperWidth) * 100) / this.slideWidth)); | |
| return { | |
| "from": fromValue, | |
| "to": toValue | |
| }; | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | HandleTimeline | |
| |-------------------------------------------------------------------------- | |
| */ | |
| handleWalking(tl, dude) { | |
| tl.to(dude, 0, {x: "0%"}); | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | HandleTimeline | |
| |-------------------------------------------------------------------------- | |
| */ | |
| getWalkingTiming(tempPosition) { | |
| let timing = 4; | |
| let walkingPercent = Math.abs(tempPosition - this.dudePosition); | |
| timing = timing * walkingPercent / 100; | |
| if (timing < 1) { | |
| timing = 1; | |
| } | |
| this.walkingTime = Math.round(timing); | |
| return this.walkingTime | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | moveDude | |
| |-------------------------------------------------------------------------- | |
| */ | |
| moveDude(value, skip) { | |
| const tl = new TimelineMax(); | |
| const dudeWrapper = document.querySelector('.o-roomWrapper__dude'); | |
| const dude = dudeWrapper.querySelector('svg'); | |
| this.handleWalking(tl, dude); | |
| if (!skip) { | |
| this.setNextSlideDirection(); | |
| } | |
| let {dudePositionPX} = this; | |
| if (this.nextDirection !== 'no') { | |
| this.moveSlide(this.nextDirection); | |
| } | |
| dudePositionPX = this.clientPositionX - (this.dudeWidthPX / 2); | |
| if (this.roomWrapperWidth + Math.abs(this.xPosition) === this.slideWidth) { | |
| this.nextDirection = 'no'; | |
| } | |
| if (this.clientPositionX <= this.dudeWidthPX) { | |
| dudePositionPX = 50; | |
| } | |
| if ( | |
| this.clientPositionX >= Math.abs(this.xPosition) + this.roomWrapperWidth - (this.dudeWidthPX / 2)) { | |
| if (Math.abs(this.xPosition) > 0) { | |
| dudePositionPX = this.slideWidth - this.dudeWidthPX - 50; | |
| } | |
| } | |
| this.$dude.style.transitionDuration = `${this.getWalkingTiming(Math.round(dudePositionPX * 100 / this.slideWidth))}s`; | |
| this.$dude.style.transitionDelay = '0s'; | |
| // TODO: Better Walking Animation | |
| if ( | |
| this.nextDirection === 'left' | |
| && this.clientPositionX > Math.round(this.clickArea * this.roomWrapperWidth / 100) | |
| ) { | |
| dudePositionPX = (Math.abs(this.xPosition) + this.roomWrapperWidth) - (this.dudeWidthPX * 1.5); | |
| const dudePositionTemp = Math.round(dudePositionPX * 100 / this.slideWidth); | |
| this.$dude.style.transitionDelay = '0s'; | |
| if (dudePositionTemp >= this.getVisibleRoomRange().from && dudePositionTemp <= this.getVisibleRoomRange().to) { | |
| dudePositionPX = this.clientPositionX - (this.dudeWidthPX / 2); | |
| } | |
| if (dudePositionPX <= 50) { | |
| dudePositionPX = 50; | |
| } | |
| } | |
| if (this.nextDirection === 'right') { | |
| dudePositionPX = Math.abs(this.xPosition) + (this.dudeWidthPX / 2); | |
| const dudePositionTemp = Math.round(dudePositionPX * 100 / this.slideWidth); | |
| this.$dude.style.transitionDelay = '0s'; | |
| if (dudePositionTemp >= this.getVisibleRoomRange().from && dudePositionTemp <= this.getVisibleRoomRange().to) { | |
| dudePositionPX = this.clientPositionX - (this.dudeWidthPX / 2); | |
| } | |
| } | |
| if (value && skip) { | |
| this.$dude.style.transitionDuration = '0s'; | |
| dudePositionPX = value; | |
| } | |
| let oldDudePositionPX = this.dudePositionPX; | |
| this.nextDudeDirection = 'right'; | |
| if (dudePositionPX < oldDudePositionPX) { | |
| this.nextDudeDirection = 'left'; | |
| } | |
| this.$store.commit('setDudePositionPX', dudePositionPX); | |
| if (this.lastRoom === this.currentRoom) { | |
| console.log('foo'); | |
| let scaleX = 1; | |
| if (this.nextDudeDirection === 'left') { | |
| scaleX = -1 | |
| } | |
| let repeating = 0; | |
| let timing = this.walkingTime; | |
| if (this.walkingTime > 0.5 && this.walkingTime <= 1) { | |
| repeating = 1; | |
| timing = this.walkingTime / 2; | |
| } else if (this.walkingTime > 1 && this.walkingTime <= 1.5) { | |
| repeating = 2; | |
| timing = this.walkingTime / 3; | |
| } else if (this.walkingTime > 1.5 && this.walkingTime <= 2) { | |
| repeating = 3; | |
| timing = this.walkingTime / 4; | |
| } else if (this.walkingTime > 2 && this.walkingTime <= 3) { | |
| repeating = 4; | |
| timing = this.walkingTime / 5; | |
| } else if (this.walkingTime > 3) { | |
| repeating = 5; | |
| timing = this.walkingTime / 6; | |
| } | |
| tl | |
| .to(dude, 0, {x: "0", scaleX: scaleX,}) | |
| .to(dude, timing, { | |
| x: "-81.818181818%", scaleX: scaleX, ease: SteppedEase.config(9), repeat: repeating | |
| }) | |
| .to(dude, 0, { | |
| x: "0", scaleX: scaleX, onComplete: this.handleWalking(tl, dude) | |
| }); | |
| } | |
| this.lastRoom = this.currentRoom; | |
| this.$store.commit('setDudePosition', Math.round(dudePositionPX * 100 / this.slideWidth)); | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | firstTimeInRoom | |
| |-------------------------------------------------------------------------- | |
| */ | |
| firstTimeInRoom() { | |
| this.moveDude(this.dudePositionPX, true); | |
| let position = this.dudePositionPX; | |
| if (this.roomWrapperWidth + position > this.slideWidth) { | |
| position = Math.round(this.slideWidth - this.roomWrapperWidth); | |
| } | |
| this.moveSlide('left', -position, true); | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | hideSlider | |
| |-------------------------------------------------------------------------- | |
| */ | |
| hideSlider() { | |
| this.slide.style.transitionDuration = '0s'; | |
| this.slide.style.opacity = 0; | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | showSlider | |
| |-------------------------------------------------------------------------- | |
| */ | |
| showSlider() { | |
| this.slide.style.transitionDuration = '1s'; | |
| this.slide.style.opacity = 1; | |
| }, | |
| /* | |
| |-------------------------------------------------------------------------- | |
| | triggerResize | |
| |-------------------------------------------------------------------------- | |
| */ | |
| triggerResize() { | |
| window.addEventListener('resize', () => { | |
| if (this.ww !== (Math.round(this.w.innerWidth) || Math.round(this.e.clientWidth))) { | |
| clearTimeout(this.resizeTimer); | |
| this.hideSlider(); | |
| this.resizeTimer = setTimeout(() => { | |
| setTimeout(() => { | |
| this.setVariables(); | |
| }, 250); | |
| setTimeout(() => { | |
| this.resetSlider(); | |
| }, 500); | |
| setTimeout(() => { | |
| this.showSlider(); | |
| }, 750); | |
| }, 1000); | |
| } | |
| }); | |
| }, | |
| }, | |
| watch: { | |
| currentRoom(newValue, oldValue) { | |
| if (oldValue !== newValue) { | |
| this.lastRoom = oldValue; | |
| this.resetSlider(); | |
| this.firstTimeInRoom(); | |
| } | |
| }, | |
| }, | |
| mounted() { | |
| // Get Elements | |
| this.getDomElements(); | |
| // Set WW For Resize Event to handle Mobile Safari | |
| this.ww = Math.round(this.w.innerWidth) || Math.round(this.e.clientWidth); | |
| // Set Variables | |
| this.setVariables(); | |
| // Resizing | |
| this.triggerResize(); | |
| // GetRoom | |
| this.$room = document.querySelector('.o-roomWrapper'); | |
| if (!this.$room) { | |
| return; | |
| } | |
| this.$room.addEventListener('click', (evt) => { | |
| document.body.classList.remove('is-open--navigation'); | |
| this.$store.commit('setNavOpen', false); | |
| this.$store.commit('setClientPositionX', evt.clientX + Math.abs(this.xPosition)); | |
| const targets = evt.path || (evt.composedPath && evt.composedPath()); | |
| const event = targets.find((e) => { | |
| const id = e.id; | |
| if (id && id.startsWith('evt')) { | |
| console.log(id); | |
| return id; | |
| } | |
| return false; | |
| }); | |
| this.setNextSlideDirection(); | |
| if (event) { | |
| if (this.nextDirection === 'no') { | |
| this.$store.commit('setCurrentEvent', event.id); | |
| } else { | |
| this.moveDude(); | |
| } | |
| } else { | |
| this.$store.commit('setCurrentEvent', false); | |
| this.moveDude(); | |
| } | |
| }); | |
| }, | |
| created() { | |
| }, | |
| components: { | |
| Navigation, | |
| RoomWrapperFrontDeskContent, | |
| RoomWrapperLoungeContent, | |
| RoomWrapperMeetingHRContent, | |
| RoomWrapperDevOfficeContent, | |
| RoomWrapperRocketRoofContent, | |
| Link, | |
| }, | |
| }; | |
| </script> | |
| <!-- Add "scoped" attribute to limit CSS to this component only --> | |
| <style scoped lang="scss"> | |
| .o-roomslider { | |
| $root: &; | |
| width: 100%; | |
| height: 100vh; | |
| // padding: 0 4vw; | |
| position: relative; | |
| background-color: c('black'); | |
| [data-currentroom='house'] & { | |
| height: calc(100vh - 76px); | |
| @include media('>=1160px') { | |
| height: calc(100vh - 120px); | |
| } | |
| } | |
| [data-currentroom='frontDesk'] & { | |
| background-color: c('room', 'front'); | |
| } | |
| [data-currentroom='lounge'] & { | |
| background-color: c('room', 'lounge'); | |
| } | |
| [data-currentroom='meetingHR'] & { | |
| background-color: c('room', 'meetingHR'); | |
| } | |
| [data-currentroom='devOffice'] & { | |
| background-color: c('room', 'dev'); | |
| } | |
| [data-currentroom='rocketRoof'] & { | |
| background-color: c('room', 'rocket'); | |
| } | |
| &__slider { | |
| width: 100%; | |
| height: 100%; | |
| overflow: hidden; | |
| position: absolute; | |
| left: 50%; | |
| top: 50%; | |
| // max-width: 92vw; | |
| transform: translate(-50%, -50%); | |
| // border: 1vh solid #454646; | |
| &:hover { | |
| cursor: url(~@/assets/images/svg/global/pointer.svg) 22 22, auto; | |
| // cursor: pointer; | |
| .is-funnyCursor--left & { | |
| cursor: url(~@/assets/images/svg/global/arrowLeft.svg) 22 22, auto; | |
| // cursor: w-resize; | |
| } | |
| .is-funnyCursor--hand & { | |
| cursor: url(~@/assets/images/svg/global/hand.svg) 22 22, auto; | |
| // cursor: w-resize; | |
| } | |
| .is-funnyCursor--right & { | |
| cursor: url(~@/assets/images/svg/global/arrowRight.svg) 22 22, auto; | |
| // cursor: e-resize; | |
| } | |
| } | |
| &::before, | |
| &::after { | |
| content: ''; | |
| position: absolute; | |
| z-index: 100000; | |
| top: 0; | |
| bottom: 0; | |
| background-color: transparent; | |
| opacity: 0.25; | |
| // width: calc((100vw * 0.92) * 0.24); | |
| width: calc(100vw * 0.24); | |
| pointer-events: none; | |
| @include media('>=l') { | |
| // width: calc((100vw * 0.92) * 0.12); | |
| width: calc(100vw * 0.12); | |
| } | |
| } | |
| &::before { | |
| left: 0; | |
| } | |
| &::after { | |
| right: 0; | |
| } | |
| } | |
| &__sliderSlide { | |
| height: 100vh; | |
| width: 400vh; | |
| transform: translateX(0); | |
| transition-property: all; | |
| transition-duration: 1s; | |
| transition-timing-function: linear; | |
| position: absolute; | |
| left: 0; | |
| bottom: 0; | |
| z-index: 100; | |
| .is-open--navigation & { | |
| opacity: 0.2; | |
| } | |
| /*@media screen and (orientation: landscape) { | |
| width: calc(100% * 4); | |
| height: 100%; | |
| }*/ | |
| } | |
| &__sliderControls { | |
| position: absolute; | |
| left: 0; | |
| right: 0; | |
| top: 0; | |
| z-index: 1000; | |
| height: 50px; | |
| display: none; | |
| } | |
| &__sliderButton { | |
| font-size: 13px; | |
| font-weight: 700; | |
| width: 50%; | |
| line-height: 54px; | |
| height: 50px; | |
| cursor: pointer; | |
| position: absolute; | |
| background-color: c('red'); | |
| color: c('white'); | |
| transition: all 0.5s ease('out-cubic'); | |
| &--prev { | |
| display: none; | |
| left: 0; | |
| } | |
| &--next { | |
| right: 0; | |
| } | |
| &:hover { | |
| background-color: mix(c('black'), c('red'), 20%); | |
| } | |
| } | |
| @mixin a-link() { | |
| margin-left: s(1); | |
| margin-right: s(1); | |
| line-height: 2; | |
| @include f(13px, 17px, padding-top); | |
| @include f(11px, 15px, padding-bottom); | |
| @include f(24px, 32px, padding-left padding-right); | |
| @include ms-respond(font-size, 0); | |
| border-radius: 3px; | |
| white-space: nowrap; | |
| } | |
| &__home { | |
| $root: &; | |
| @include make-vr(); | |
| display: inline-flex; | |
| flex-direction: row; | |
| align-items: center; | |
| justify-content: center; | |
| position: relative; | |
| -webkit-appearance: none; // stylelint-disable-line | |
| transition: all 0.25s ease('out-cubic'); | |
| &--primary { | |
| @include a-link(); | |
| background-color: mix(black, c('room', 'rocket'), 20%); | |
| border: 1px solid c('white'); | |
| color: c('white'); | |
| [data-currentroom='lounge'] & { | |
| background-color: mix(black, c('room', 'lounge'), 20%); | |
| } | |
| [data-currentroom='meetingHR'] & { | |
| background-color: mix(black, c('room', 'meetingHR'), 20%); | |
| } | |
| [data-currentroom='devOffice'] & { | |
| background-color: mix(black, c('room', 'dev'), 20%); | |
| } | |
| [data-currentroom='rocketRoof'] & { | |
| background-color: mix(black, c('room', 'rocket'), 20%); | |
| } | |
| } | |
| &:hover { | |
| color: c('white'); | |
| background-color: mix(black, c('room', 'rocket'), 40%); | |
| cursor: url(~@/assets/images/svg/global/hand.svg) 22 22, auto; | |
| [data-currentroom='lounge'] & { | |
| background-color: mix(black, c('room', 'lounge'), 40%); | |
| } | |
| [data-currentroom='meetingHR'] & { | |
| background-color: mix(black, c('room', 'meetingHR'), 40%); | |
| } | |
| [data-currentroom='devOffice'] & { | |
| background-color: mix(black, c('room', 'dev'), 40%); | |
| } | |
| [data-currentroom='rocketRoof'] & { | |
| background-color: mix(black, c('room', 'rocket'), 40%); | |
| } | |
| } | |
| &--home { | |
| position: absolute; | |
| z-index: 1000000; | |
| left: s(1); | |
| bottom: s(2); | |
| border: 2px solid rgba(c('white'), 0.9); | |
| font-size: ms(-1); | |
| font-weight: 700; | |
| border-radius: 3px; | |
| @include f(9px, 13px, padding-top); | |
| @include f(7px, 11px, padding-bottom); | |
| @include f(12px, 16px, padding-left padding-right); | |
| box-shadow: 0 10px 50px rgba(c('black'), 0.2); | |
| &:hover { | |
| transform: translate(0, 2px); | |
| box-shadow: 0 2px 5px rgba(c('black'), 0.2); | |
| } | |
| } | |
| &:focus { | |
| outline: none; | |
| } | |
| &__text { | |
| display: inline-block; | |
| line-height: 1; | |
| order: 1; | |
| } | |
| } | |
| } | |
| </style> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment