datagrid sortname如何定义多列_如何实现一个小说分页的功能

本文探讨了如何在Datagrid中定义sortname以实现多列排序,并介绍了实现小说分页功能的方法。通过理解思路,读者可以掌握这两种技术的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击上方“程序员黑叔”,选择“置顶或者星标”

你的关注意义重大!

来源 | https://juejin.im/post/6886418644381728776

先让我找找我的思路在哪里?

在小说读书APP中,都会有分页的功能,那么前端如何实现这个功能呢?因为没有什么思路,那就只能在前辈的项目中寻找思路了。这不,直接打开起点的页面,按下那个传说中的F12键,开始我传奇生涯!...不好意思,串台了46dc63a22b14dd1531c0e57885752537.png好了,然后在找一本有缘书,跟我一同前往那神秘的未知世界。998845c74c121d438fb594cc18287843.png就决定是你了,开始免费试读。0f667e4b6aedeca4cc845b0536003b5a.png然后我们就可以发现起点是如何实现这个功能的了,原来是使用columns这个属性来让文章自动分页的昂。我们现在就去搜索一下columns是何方神圣吧。
developer.mozilla.org/zh-CN/docs/… - MDN
通过MDN的实例我们知道了原来columns是一个简写属性,代表了 column-width 和column-count两个属性,这两个属性又分别代表着:
理想的列宽,定义为  或 auto 关键字。实际宽度可以更宽或更窄以适合可用空间。See column-width。元素内容应分成的理想列数,定义为  或 auto 关键字。如果此值和列的宽度都不是 auto ,则它仅指示允许的最大列数。请参阅 column-count 。- MDN
然后我们再看回起点中对这个属性的定义columns: calc(100vw - 32px) 1;其中calc(100vw - 32px)这个代表column-width的值代表了每一列的宽度为整屏的宽度再减去两边的间隙各16px
这里一提column-gap就是列与列的间隙,所以在图中可以看到这里的值设置了16px
而代表column-count这个值的1就是只保持一列,并没有什么作用,因为100vw - 32px这个宽度已经不可能让屏幕中再多一列了,多出的列数将会排列在右侧。
当使用 columns 规定两个值时,如:columns: 100px 3;表示:当每列宽度大于 100px 时,就以 3 列分割显示;当浏览器宽度缩小,导致在 3 列情况下无法满足每列大于 100px,就开始转为 2 列;当浏览器再缩小,2 列中每列无法再保持 100px 每列时,再次转为 1 列...以此类推,"100px" 为每列不可低于的宽值,"3" 表示指定要显示的列。相对于单独设置 column-width 或 column-count,columns 要更加灵活。- 菜鸟教程 - Kai
还有一点需要注意的是,需要将文章的高度设置为屏幕的高度,这样才会排成多列。fc7acd1c0308447fd146d98b075a177d.png再通过translate进行平移,以及父级的overflow: hidden隐藏多余列,就可以达到分页的效果了。53b1bb51211ab5e4910c56f0786102a0.png最后看看columns的兼容性:8bcf11d860f4105d262ee867cfd44e92.png可以看出都支持了这个属性,可以放心大胆的用。

思路已至,码来!

我们来简单的实现一下这个效果。
// index.html      Document      

第一章: 我不是小说

小说真可爱,我要看小说,小说不给看,我就写小说,写小说不好写,我就看小说............

// style.css* {  margin: 0;  padding: 0;  box-sizing: border-box;}.wrapper{  height: 100vh;  overflow: hidden;  margin: 0 16px;}article{  columns: calc(100vw - 32px) 1;  column-gap: 16px;  height: 100%;  transition: .4s;}
let i = 0;let article = document.querySelector('article');setInterval(() => {  let width = document.body.offsetWidth;  i++;  if(i > 3) i = 0;  article.style.transform = `translateX(-${(width - 16) * i}px)`}, 1000);
最后实现的效果就是:6bac31b961adf611d99301a5dad74d77.gif到这里就结束了,感谢阅读。最后
  1. 感谢阅读,欢迎分享给身边的朋友,

  2. 记得关注噢,黑叔带你飞!

7a1f7e3ba9b30bb210922d1fd4a85681.png

亲,点这涨工资 acc4fc34b107dde6afbcb8c1736ffbcf.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值