11<template lang='pug'>
2- .login-settings ( ref ='body' )
2+ .login-settings (
3+ )
34 h1 {{ $t('settings.title') }}:
4- .settings-themes-item (
5- @click ='changeTheme(theme)'
6- v-for ='(theme, i) in themes' : key= 'i'
7- :style ='`background: url(${setImage(theme.name.toLowerCase())}) no-repeat center/cover`'
8- )
9- h4 {{theme.name}}
10- .settings-themes-item (
11- @click ='changeTheme(background, true)'
12- v-for ='(background, index) in backgrounds'
13- :key ='`${index}-background`' : style= '`background: url(${backgrounds[index]}) no-repeat center/cover`'
14- )
5+ .settings-themes-body ( ref ='listener' )
6+ .settings-themes-items ( ref ='body' : style= '`transform: translateX(${offset}px)`' )
7+ .settings-themes-item (
8+ @click ='changeTheme(theme)'
9+ v-for ='(theme, i) in themes' : key= 'i'
10+ :style ='`background: url(${setImage(theme.name.toLowerCase())}) no-repeat center/cover`'
11+ )
12+ h4 {{ theme.name }}
13+ .settings-themes-item (
14+ @click ='changeTheme(background, true)'
15+ v-for ='(background, index) in backgrounds'
16+ :key ='`${index}-background`' : style= '`background: url(${backgrounds[index]}) no-repeat center/cover`'
17+ )
1518</template >
1619
1720<script >
1821import { backgrounds } from ' @/lightdm'
1922import { mapState , mapGetters , mapActions } from ' vuex'
2023
2124export default {
22- name: ' LoginComponent ' ,
25+ name: ' LoginSettings ' ,
2326 data () {
2427 return {
25- backgrounds: backgrounds ()
28+ backgrounds: backgrounds (),
29+ offset: 0
2630 }
2731 },
2832 computed: {
2933 ... mapState (' settings' , [' themes' , ' loginPosition' ]),
3034 ... mapGetters (' settings' , { theme: ' getCurrentTheme' }),
3135 },
3236 mounted () {
33- const block = this .$refs .body || document .querySelector (' .login-settings' )
37+ if ([' left' , ' right' ].includes (this .loginPosition )) {
38+ return
39+ }
40+ const listener = this .$refs .listener
41+ const block = this .$refs .body
3442
35- console .log (this .$refs .body , ' this.$refs.body' )
36- block .addEventListener (' scroll' , this .handleScroll , { passive: false })
43+ listener .addEventListener (' wheel' , this .handleWheel , { passive: false })
3744 },
38- destroyed () {
39- const block = document . querySelector ( ' .login-settings ' )
40- block .removeEventListener (' scroll ' , this .handleScroll )
45+ beforeDestroy () {
46+ const listener = this . $refs . listener
47+ listener .removeEventListener (' wheel ' , this .handleWheel )
4148 },
4249 methods: {
43- handleScroll (event ) {
44- console .log (event )
50+ handleWheel (event ) {
51+ const block = this .$refs .body
52+ const { wheelDeltaY } = event
53+ let step = 20
54+ const maxOffset = block .scrollWidth - block .clientWidth
55+
56+ wheelDeltaY > 0 ? step *= 1 : step *= - 1
57+ if (
58+ (step > 0 && this .offset + step < step) ||
59+ (step < 0 && Math .abs (this .offset + step) < maxOffset)
60+ ) {
61+ this .offset += step
62+ }
63+
4564 event .stopPropagation ()
4665 event .preventDefault ()
4766 },
@@ -67,4 +86,16 @@ export default {
6786}
6887 </script >
6988
70- <style lang="stylus"></style >
89+ <style lang="stylus">
90+ .settings-themes-body
91+ width 100%
92+ height 100%
93+ position relative
94+ overflow hidden
95+
96+ .settings-themes-items
97+ width 100%
98+ height 100%
99+ position absolute
100+ display flex
101+ </style >
0 commit comments