# 滚动
点击查看综合示例代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/>
<style>
/* global styles */
:root {
--color-black-text: #333;
--color-white-background: #fff
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html {
font-size: 62.5%;
/*font-family: Microsoft YaHei, Arial, sans-serif;*/
/*阻止旋转屏幕时自动调整字体大小*/
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
/* 解决IOS默认滑动很卡的情况 */
-webkit-overflow-scrolling: touch;
}
html,
body {
/*width: 100%;*/
/*height: 100%;*/
margin: 0;
padding: 0;
/*overflow: auto;*/
}
body {
font-size: 14px;
font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
color: var(--color-black-text);
background-color: var(--color-white-background);
line-height: 1.15;
padding: 20px 10%;
position: relative;
}
#back {
width: 40px;
height: 40px;
text-align: center;
line-height: 40px;
position: fixed;
bottom: 10%;
right: 20px;
background: #000;
color: #fff;
cursor: pointer;
}
.dir {
position: fixed;
top: 50%;
left: 20px;
transform: translateY(-50%);
display: flex;
flex-direction: column;
width: 40px;
text-align: center;
}
.dir > div {
height: 40px;
line-height: 40px;
cursor: pointer;
background: #333;
color: #fff;
}
.dir > div.active {
background: #fac105;
}
.content div {
height: 400px;
border: 1px solid #181818;
margin-bottom: 20px;
}
</style>
</head>
<body>
<div class="dir">
<div data-id="a">a</div>
<div data-id="b">b</div>
<div data-id="c">c</div>
<div data-id="d">d</div>
<div data-id="e">e</div>
<div data-id="f">f</div>
<div data-id="g">g</div>
<div data-id="h">h</div>
</div>
<div id="back">
TOP
</div>
<div class="content">
<div id="a">a</div>
<div id="b">b</div>
<div id="c">c</div>
<div id="d">d</div>
<div id="e">e</div>
<div id="f">f</div>
<div id="g">g</div>
<div id="h">h</div>
</div>
<script src="https://unpkg.com/@vensst/js-toolkit"></script>
<script type="module">
const {
addClass,
siblings,
removeClass,
getScrollPosition,
smoothScroll,
scrollToTop,
ScrollView,
initScrollView,
} = jsToolkit
const els = document.querySelectorAll('.dir > div')
els.forEach(item => {
item.onclick = function (e) {
const id = this.getAttribute('data-id')
smoothScroll(`#${id}`)
}
})
const btn = document.getElementById('back')
btn.onclick = function () {
scrollToTop()
// scrollToTop(window,{behavior: 'instant'})
console.log('--getScrollPosition--', getScrollPosition(),)
// body为滚动元素
// scrollToTop('body')
// console.log('--getScrollPosition--', getScrollPosition('body'),)
}
const arr1 = [
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
]
// const arr2 = [
// {
// name: 'a',
// },
// {
// name: 'b',
// },
// {
// name: 'c',
// },
// {
// name: 'd',
// },
// {
// name: 'e',
// },
// {
// name: 'f',
// },
// {
// name: 'g',
// },
// {
// name: 'h',
// },
// ]
const scrollEl = window
// body为滚动元素
// const scrollEl = document.querySelector('body')
const scrollView = initScrollView({
dataList: arr1,
// valueKey: 'name',
attrName:"id",
callback: function (e) {
const el = document.querySelector(`[data-id=${e.value}]`)
addClass(el, 'active')
siblings(el).forEach(item => {
removeClass(item, 'active')
})
},
})
scrollEl.addEventListener('scroll', scrollView.handlerScroll.bind(scrollView))
</script>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
# getScrollPosition
说明:
获取当前的滚动位置
参数:
- {(Window|Element|string)} [el=window] 元素或选择器
返回值:
{Object} 滚动位置 {x,y}
示例:
参考上面的综合示例代码
# smoothScroll
说明:
滚动到指定元素区域
参数:
- {{(Element|string)} el 元素或选择器
示例:
参考上面的综合示例代码
# scrollToTop
说明:
平滑滚动至顶部
参数:
- {(Window|Element|string)} [el=window] 元素或选择器
- {Object} [options={behavior: 'smooth'}] 参数
示例:
参考上面的综合示例代码
# initScrollView
说明:
初始化滚动监听
参数:
- {Object} options 配置对象
- {Array} options.dataList 数据列表
- {string} options.valueKey valueKey 有值时,dataList为对象数组
- {string} options.attrName 属性名
- {Function} options.callback 回调函数
添加版本:1.1.0-beta.11
返回值:
{ScrollView} 返回ScrollView实例对象
示例:
参考上面的综合示例代码