新增列表滚动条位置恢复

pull/96/head
lyswhut 2019-09-22 11:33:37 +08:00
parent bebf1906a2
commit f7267806df
5 changed files with 73 additions and 10 deletions

View File

@ -0,0 +1,4 @@
# 新增
- 新增试听列表**滚动条位置恢复**设置(可自动恢复到上次离开时的列表滚动位置),本功能默认开启,若不需要可到设置-列表设置将其关闭

View File

@ -18,6 +18,9 @@ export default {
if (sortId != null) state.setting.songList.sortId = sortId if (sortId != null) state.setting.songList.sortId = sortId
if (source != null) state.setting.songList.source = source if (source != null) state.setting.songList.source = source
}, },
setListScroll(state, scrollTop) {
state.setting.list.scroll.location = scrollTop
},
setNewVersion(state, val) { setNewVersion(state, val) {
// val.history.forEach(ver => { // val.history.forEach(ver => {
// ver.desc = ver.desc.replace(/\n/g, '<br>') // ver.desc = ver.desc.replace(/\n/g, '<br>')

View File

@ -44,7 +44,7 @@ export const decodeName = str => str.replace(/&apos;/g, '\'')
export const scrollTo = (element, to, duration = 300, fn = function() {}) => { export const scrollTo = (element, to, duration = 300, fn = function() {}) => {
if (!element) return if (!element) return
const start = element.scrollTop || element.scrollY const start = element.scrollTop || element.scrollY || 0
const change = to - start const change = to - start
const increment = 10 const increment = 10
if (!change) { if (!change) {
@ -164,7 +164,7 @@ export const isChildren = (parent, children) => {
* @param {*} setting * @param {*} setting
*/ */
export const updateSetting = setting => { export const updateSetting = setting => {
const defaultVersion = '1.0.9' const defaultVersion = '1.0.10'
const defaultSetting = { const defaultSetting = {
version: defaultVersion, version: defaultVersion,
player: { player: {
@ -175,6 +175,10 @@ export const updateSetting = setting => {
}, },
list: { list: {
isShowAlbumName: true, isShowAlbumName: true,
scroll: {
enable: true,
location: 0,
},
}, },
download: { download: {
savePath: path.join(os.homedir(), 'Desktop'), savePath: path.join(os.homedir(), 'Desktop'),
@ -281,3 +285,21 @@ export const saveLrc = (filePath, lrc) => {
if (err) console.log(err) if (err) console.log(err)
}) })
} }
/**
* 生成节流函数
* @param {*} fn
* @param {*} delay
*/
export const throttle = (fn, delay = 100) => {
let timer = null
let _args = null
return function(...args) {
_args = args
if (timer) return
timer = setTimeout(() => {
timer = null
fn.apply(this, _args)
}, delay)
}
}

View File

@ -14,7 +14,7 @@
th.nobreak(style="width: 20%;") 专辑 th.nobreak(style="width: 20%;") 专辑
th.nobreak(style="width: 20%;") 操作 th.nobreak(style="width: 20%;") 操作
th.nobreak(style="width: 10%;") 时长 th.nobreak(style="width: 10%;") 时长
div.scroll(:class="$style.tbody") div.scroll(:class="$style.tbody" @scroll="handleScroll" ref="dom_scrollContent")
table table
tbody tbody
tr(v-for='(item, index) in list' :key='item.songmid' tr(v-for='(item, index) in list' :key='item.songmid'
@ -45,6 +45,7 @@
<script> <script>
import { mapMutations, mapGetters, mapActions } from 'vuex' import { mapMutations, mapGetters, mapActions } from 'vuex'
import { throttle } from '../utils'
export default { export default {
name: 'List', name: 'List',
data() { data() {
@ -59,6 +60,7 @@ export default {
isShowEditBtn: false, isShowEditBtn: false,
isShowDownloadMultiple: false, isShowDownloadMultiple: false,
delayShow: false, delayShow: false,
routeLeaveLocation: null,
} }
}, },
computed: { computed: {
@ -121,12 +123,33 @@ export default {
// this.handleSearch(this.text, this.page) // this.handleSearch(this.text, this.page)
// } // }
// }, // },
beforeRouteLeave(to, from, next) {
this.routeLeaveLocation = this.$refs.dom_scrollContent.scrollTop
next()
},
created() {
this.handleScroll = throttle(e => {
if (this.routeLeaveLocation) {
this.setListScroll(this.routeLeaveLocation)
} else {
this.setListScroll(e.target.scrollTop)
}
}, 1000)
},
mounted() { mounted() {
if (this.list.length > 150) { if (this.list.length > 150) {
setTimeout(() => this.delayShow = true, 200) setTimeout(() => {
} else this.delayShow = true this.delayShow = true
if (this.setting.list.scroll.enable && this.setting.list.scroll.location) {
this.$nextTick(() => this.$refs.dom_scrollContent.scrollTo(0, this.setting.list.scroll.location))
}
}, 200)
} else {
this.delayShow = true
}
}, },
methods: { methods: {
...mapMutations(['setListScroll']),
...mapMutations('list', ['defaultListRemove', 'defaultListRemoveMultiple']), ...mapMutations('list', ['defaultListRemove', 'defaultListRemoveMultiple']),
...mapActions('download', ['createDownload', 'createDownloadMultiple']), ...mapActions('download', ['createDownload', 'createDownloadMultiple']),
...mapMutations('player', ['setList']), ...mapMutations('player', ['setList']),
@ -197,6 +220,9 @@ export default {
break break
} }
}, },
// handleScroll(e) {
// console.log(e.target.scrollTop)
// },
}, },
} }
</script> </script>

View File

@ -35,6 +35,15 @@ div.scroll(:class="$style.setting")
h3 任务栏播放进度条 h3 任务栏播放进度条
div div
material-checkbox(id="setting_player_showTaskProgess" v-model="current_setting.player.isShowTaskProgess" label="是否启用") material-checkbox(id="setting_player_showTaskProgess" v-model="current_setting.player.isShowTaskProgess" label="是否启用")
dt 列表设置
dd(title='是否恢复播放列表滚动条位置')
h3 恢复列表滚动位置仅对我的音乐分类有效
div
material-checkbox(id="setting_list_scroll_enable" v-model="current_setting.list.scroll.enable" label="是否启用")
//- dd(title='')
h3 专辑栏
div
material-checkbox(id="setting_list_showalbum" v-model="current_setting.list.isShowAlbumName" label="是否显示专辑栏")
dt 下载设置 dt 下载设置
dd(title='下载歌曲保存的路径') dd(title='下载歌曲保存的路径')
h3 下载路径 h3 下载路径
@ -57,11 +66,6 @@ div.scroll(:class="$style.setting")
h3 歌词下载 h3 歌词下载
div div
material-checkbox(id="setting_download_isDownloadLrc" v-model="current_setting.download.isDownloadLrc" label="是否启用") material-checkbox(id="setting_download_isDownloadLrc" v-model="current_setting.download.isDownloadLrc" label="是否启用")
//- dt
//- dd(title='')
h3 专辑栏
div
material-checkbox(id="setting_list_showalbum" v-model="current_setting.list.isShowAlbumName" label="是否显示专辑栏")
dt 网络设置 dt 网络设置
dd dd
h3 代理设置歌曲下载暂不支持代理 h3 代理设置歌曲下载暂不支持代理
@ -174,6 +178,10 @@ export default {
}, },
list: { list: {
isShowAlbumName: true, isShowAlbumName: true,
scroll: {
enable: true,
location: 0,
},
}, },
download: { download: {
savePath: '', savePath: '',