H5手机开发锁定表头和首列(惯性滚动)解决方案

摘要:
前端时间移动端在做表格的时候需要这个功能,由于还有实现类似原生的惯性滚动功能,于是使用了iscroll插件。

前端时间移动端在做表格的时候需要这个功能,由于还有实现类似原生的惯性滚动功能,于是使用了iscroll插件。

iscroll插件下载地址:iscroll5

该功能demo github地址:https://github.com/lyc152/front-special-effects/tree/master/table-fixed

下面看下代码结构:

HTML:

H5手机开发锁定表头和首列(惯性滚动)解决方案第1张H5手机开发锁定表头和首列(惯性滚动)解决方案第2张
1 <div class="data-table">
2     <div class="t_l">
3         <table>
4             <tbody>
5                 <tr>
6                     <th>品类</th>
7                 </tr>
8             </tbody>
9         </table>
10         <div class="t_l_freeze"id="t_l_freeze">
11             <table>
12                 <tr>
13                     <td>品类</td>
14                 </tr>
15                 <tr>
16                     <td>男鞋</td>
17                 </tr>
18                 <tr>
19                     <td>男鞋</td>
20                 </tr>
21                 <tr>
22                     <td>男鞋</td>
23                 </tr>
24                 <tr>
25                     <td>男鞋</td>
26                 </tr>
27                 <tr>
28                     <td>男鞋</td>
29                 </tr>
30                 <tr>
31                     <td>男鞋</td>
32                 </tr>
33                 <tr>
34                     <td>男鞋</td>
35                 </tr>
36                 <tr>
37                     <td>男鞋</td>
38                 </tr>
39                 <tr>
40                     <td>男鞋</td>
41                 </tr>
42                 <tr>
43                     <td>男鞋</td>
44                 </tr>
45                 <tr>
46                     <td>男鞋</td>
47                 </tr>
48                 <tr>
49                     <td>男鞋</td>
50                 </tr>
51                 <tr>
52                     <td>男鞋</td>
53                 </tr>
54                 <tr>
55                     <td>男鞋</td>
56                 </tr>
57                 <tr>
58                     <td>男鞋</td>
59                 </tr>
60                 <tr>
61                     <td>男鞋</td>
62                 </tr>
63             </table>
64         </div>
65     </div>
66     <div class="t_r">
67         <div class="t_r_t"id="t_r_t">
68             <table>
69                 <tbody>
70                 <tr>
71                     <th>1</th>
72                     <th>2</th>
73                     <th>3</th>
74                     <th>4</th>
75                     <th>5</th>
76                     <th>6</th>
77                     <th>7</th>
78                     <th>8</th>
79                     <th>9</th>
80                 </tr>
81                 </tbody>
82             </table>
83         </div>
84         <div class="t_r_content"id="t_r_content">
85             <table>
86                 <tbody>
87                     <tr>
88                         <td>1</td>
89                         <td>2</td>
90                         <td>3</td>
91                         <td>4</td>
92                         <td>5</td>
93                         <td>6</td>
94                         <td>7</td>
95                         <td>8</td>
96                         <td>9</td>
97                     </tr>
98                     <tr>
99                         <td>1</td>
100                         <td>2</td>
101                         <td>3</td>
102                         <td>4</td>
103                         <td>5</td>
104                         <td>6</td>
105                         <td>7</td>
106                         <td>8</td>
107                         <td>9</td>
108                     </tr>
109                     <tr>
110                         <td>1</td>
111                         <td>2</td>
112                         <td>3</td>
113                         <td>4</td>
114                         <td>5</td>
115                         <td>6</td>
116                         <td>7</td>
117                         <td>8</td>
118                         <td>9</td>
119                     </tr>
120                     <tr>
121                         <td>1</td>
122                         <td>2</td>
123                         <td>3</td>
124                         <td>4</td>
125                         <td>5</td>
126                         <td>6</td>
127                         <td>7</td>
128                         <td>8</td>
129                         <td>9</td>
130                     </tr>
131                     <tr>
132                         <td>1</td>
133                         <td>2</td>
134                         <td>3</td>
135                         <td>4</td>
136                         <td>5</td>
137                         <td>6</td>
138                         <td>7</td>
139                         <td>8</td>
140                         <td>9</td>
141                     </tr>
142                     <tr>
143                         <td>1</td>
144                         <td>2</td>
145                         <td>3</td>
146                         <td>4</td>
147                         <td>5</td>
148                         <td>6</td>
149                         <td>7</td>
150                         <td>8</td>
151                         <td>9</td>
152                     </tr>
153                     <tr>
154                         <td>1</td>
155                         <td>2</td>
156                         <td>3</td>
157                         <td>4</td>
158                         <td>5</td>
159                         <td>6</td>
160                         <td>7</td>
161                         <td>8</td>
162                         <td>9</td>
163                     </tr>
164                     <tr>
165                         <td>1</td>
166                         <td>2</td>
167                         <td>3</td>
168                         <td>4</td>
169                         <td>5</td>
170                         <td>6</td>
171                         <td>7</td>
172                         <td>8</td>
173                         <td>9</td>
174                     </tr>
175                     <tr>
176                         <td>1</td>
177                         <td>2</td>
178                         <td>3</td>
179                         <td>4</td>
180                         <td>5</td>
181                         <td>6</td>
182                         <td>7</td>
183                         <td>8</td>
184                         <td>9</td>
185                     </tr>
186                     <tr>
187                         <td>1</td>
188                         <td>2</td>
189                         <td>3</td>
190                         <td>4</td>
191                         <td>5</td>
192                         <td>6</td>
193                         <td>7</td>
194                         <td>8</td>
195                         <td>9</td>
196                     </tr>
197                     <tr>
198                         <td>1</td>
199                         <td>2</td>
200                         <td>3</td>
201                         <td>4</td>
202                         <td>5</td>
203                         <td>6</td>
204                         <td>7</td>
205                         <td>8</td>
206                         <td>9</td>
207                     </tr>
208                     <tr>
209                         <td>1</td>
210                         <td>2</td>
211                         <td>3</td>
212                         <td>4</td>
213                         <td>5</td>
214                         <td>6</td>
215                         <td>7</td>
216                         <td>8</td>
217                         <td>9</td>
218                     </tr>
219                     <tr>
220                         <td>1</td>
221                         <td>2</td>
222                         <td>3</td>
223                         <td>4</td>
224                         <td>5</td>
225                         <td>6</td>
226                         <td>7</td>
227                         <td>8</td>
228                         <td>9</td>
229                     </tr>
230                     <tr>
231                         <td>1</td>
232                         <td>2</td>
233                         <td>3</td>
234                         <td>4</td>
235                         <td>5</td>
236                         <td>6</td>
237                         <td>7</td>
238                         <td>8</td>
239                         <td>9</td>
240                     </tr>
241                     <tr>
242                         <td>1</td>
243                         <td>2</td>
244                         <td>3</td>
245                         <td>4</td>
246                         <td>5</td>
247                         <td>6</td>
248                         <td>7</td>
249                         <td>8</td>
250                         <td>9</td>
251                     </tr>
252                     <tr>
253                         <td>1</td>
254                         <td>2</td>
255                         <td>3</td>
256                         <td>4</td>
257                         <td>5</td>
258                         <td>6</td>
259                         <td>7</td>
260                         <td>8</td>
261                         <td>9</td>
262                     </tr>
263                     <tr>
264                         <td>1</td>
265                         <td>2</td>
266                         <td>3</td>
267                         <td>4</td>
268                         <td>5</td>
269                         <td>6</td>
270                         <td>7</td>
271                         <td>8</td>
272                         <td>9</td>
273                     </tr>
274                 </tbody>
275             </table>
276         </div>
277     </div>
278 </div>
table-fixed

实现表头和首列固定比较简单,可以将可以滚动的content容器的scrollTop和scrollLeft值分别赋值给锁定表列容器的scrollTop和锁定表头的scrollLeft。即:

H5手机开发锁定表头和首列(惯性滚动)解决方案第3张H5手机开发锁定表头和首列(惯性滚动)解决方案第4张
1         functionaa() {
2             var a = document.getElementById("t_r_content").scrollTop;
3             var b = document.getElementById("t_r_content").scrollLeft;
4             document.getElementById("cl_freeze").scrollTop =a;
5             document.getElementById("t_r_t").scrollLeft =b;
6         }
View Code

但是实现 惯性滚动 中还要 固定表头和表列就要麻烦些:

H5手机开发锁定表头和首列(惯性滚动)解决方案第5张H5手机开发锁定表头和首列(惯性滚动)解决方案第6张
1 var win =$(window),
2     scrollAreaEl = $('.t_r_content'),
3     leftFreezeEl = $('.t_l_freeze'),
4     leftTableEl = leftFreezeEl.find('table'),
5     rightTableEl = $('.t_r_t table');
6 
7 //动态计算容器最大高度
8 functionadjustHeight() {
9     var winHeight =win.height(),
10         tableHeight = winHeight - 90;
11 leftFreezeEl.height(tableHeight);
12 scrollAreaEl.height(tableHeight);
13 }
14 
15 adjustHeight();
16 win.on('resize', adjustHeight);
17 
18 //设置iscroll
19 var myScroll = new IScroll('.t_r_content', {
20     scrollX: true,
21     scrollY: true,
22     probeType: 3
23 });
24 
25 //阻止默认滚动
26 scrollAreaEl.on('touchmove mousewheel', function(e) {
27 e.preventDefault();
28 });
29 
30 //固定上左表头的滚动
31 myScroll.on('scroll', updatePosition);
32 myScroll.on('scrollEnd', updatePosition);
33 
34 functionupdatePosition() {
35     var a = this.y;
36     var b = this.x;
37     leftTableEl.css('transform', 'translate(0px, ' + a + 'px) translateZ(0px)');
38     rightTableEl.css('transform', 'translate(' + b + 'px, 0px) translateZ(0px)');
39 }
main.js

实现步骤

1.引用iscroll-probe.js 插件

2. 动态计算容器的最大高度,当resize的时候重新计算容器的最大高度;

3.设置iscroll;

4. 阻止可滚动部分content的默认滚动;

5. 阻止上左表头的滚动,需要引用iscroll 中的scroll,scrollEnd,要阻止表头和表列的滚动 ,就需要计算滚动的x和y值,更新leftTable和rightTable的transform的值就可以做到了。

当然,可以实现这个功能的方法很多,大家有什么比较好的方法我们都可以一起讨论,欢迎拍砖

免责声明:文章转载自《H5手机开发锁定表头和首列(惯性滚动)解决方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇XML WebService实例详细解析iOS Masonry 设置布局优先级。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

webpack-dev-server 配置

webpack.config.js 配置 var ExtractTextPlugin = require("extract-text-webpack-plugin"); var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin"); var AssetsPlugin...

彩虹表(rainbow table)

前记 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法); 特点是不可逆的,一般解密不了;那有没有想过,为什么各种工具网站都可以进行MD5解密呢?https://www.sojson.com/encrypt_md5.html 彩虹表,了解一下。 1. 如何存储密码才是安全的? 密码存储有几种方式: 直接...

【一】、.net core 3.1 创建windows服务并集成Serilog的步骤记录

1、新建项目   选择“Worker Service”,如下图: 2、添加nuget引用   Microsoft.Extensions.Hosting.WindowsServices   Serilog.Extensions.Hosting   Serilog.Sinks.Console   Serilog.Sinks.File 3、修改Program的...

HTML-table

表格 创建表格的四个元素:table、tr、th、td 1、<table>…</table>:整个表格以<table>标记开始、</table>标记结束。 2、<tr>…</tr>:表格的一行,所以有几对tr 表格就有几行。 3、<td>…</td>:表格的一个...

JS判断鼠标移入元素的方向

最终效果 这里的关键主要是判断鼠标是从哪个方向进入和离开的 $("li").on("mouseenter mouseleave",function(e) { var w = this.offsetWidth; var h = this.offsetHeight; var x = e...

Gridcontrol中修改数据

和做多行删除差不多,也是在实体里面来设置一个编辑状态,然后在ShowingEditor里面判断是否为修改可以这样做 var _Gdv = sender as GridView; if (_Gdv == null) { return; } var _Advice = _Gdv.GetFocusedRow() as CarModels; if (!m_Fil...