黑书开发手记
踩过的坑和爬坑过程,记录在此。其一:关于“洗牌”
书都从第一页开始“印刷”,方便。于是,书印好后,书本静置时的形态是,书页堆叠在一起,最上面是封底,封面则压在最底下。因此要理一理书页的顺序,我把这个称为“洗牌”。
书本未翻动之前,即书本处于静置状态时,洗牌是简单的行为。书本翻页了,书本实际上分为左右两部分,应置于最上层的书页不论此时在左边还是在右边,只要它的 z-index 是左边最大的或右边最大的,它就不会被覆盖。这个道理我清楚,但还是踩了坑:昨天发布的首次命名为“黑书”的预览版本,它的演示是没问题的,但再给它添加书页,翻到封底后回翻的第一个动作会出现跳页。
这个坑存在于洗牌函数。它变换成这个样子应该就可以出坑:
function setzIdx(){
for(j=0; j<all; j++){
if(j >= currentPage){
page.style.zIndex = all - j;
} else {
page.style.zIndex = j + 1;
}
if(page.style.zIndex < all) page.style.zIndex = all;
}
}
之前我拘泥于某些莫名其妙的理念,用了两个for语句来处理洗牌问题,其实用一个就好。然后最关键的是最后一句,可以大胆地提升当前页(currentPage)的层,不必去判断是不是封底——此前,最后那句仅仅是为了解决封底的问题。
人的思路有时候很古怪,它可以创造奇迹,也可以下坑。
黑黑朋友早晨好!黑黑朋友教授制图精益求精的精神值得敬佩和学习。 连黑黑都能掉坑,说明弄这个很不容易呢{:4_187:} 红影 发表于 2022-4-28 12:20
连黑黑都能掉坑,说明弄这个很不容易呢
坑多,稍不留神叫掉坑的。写程序就酱紫,即使是专业干这一行的。但这是正常现象。 梦油 发表于 2022-4-28 09:24
黑黑朋友早晨好!黑黑朋友教授制图精益求精的精神值得敬佩和学习。
中午好 马黑黑 发表于 2022-4-28 13:01
中午好
黑黑朋友好!你讲的东西我虽然不懂,但你传经授业的精神令我钦佩。 来学习 马黑黑 发表于 2022-4-28 12:50
坑多,稍不留神叫掉坑的。写程序就酱紫,即使是专业干这一行的。但这是正常现象。
只能不断发现问题,不断调整的吧{:4_204:} 红影 发表于 2022-4-28 22:29
只能不断发现问题,不断调整的吧
有些问题需要时间去发现,发现了必须修复 马黑黑 发表于 2022-4-28 22:30
有些问题需要时间去发现,发现了必须修复
不能当场发现的么。 红影 发表于 2022-4-29 22:49
不能当场发现的么。
那不叫bug的 马黑黑 发表于 2022-4-29 22:51
那不叫bug的
原来还有这样的讲究啊。 红影 发表于 2022-4-30 21:42
原来还有这样的讲究啊。
开发过程中的问题是未能解决的问题,将要解决;程序公开了发现的问题是程序缺陷,叫bug 其二:弹性翻页
所谓弹性翻页,此处指模拟现实翻书时的一些情形,如翻到指定页、翻到某一页是回翻,也许还应有书签功能。
一个小巧的JS原生翻书程序,能实现的弹性翻页应是在任意一页回翻。举例来说就是,翻到左手边书页页码为4时回头翻一页,此时左手边的页码是2,然后往前翻往后翻都可以。
不要小看这个小小的回翻动作,原生JS能实现回翻的例子基本找不到,都是像当前的黑书那样翻到尾才能翻回头,翻到头才能又往另一边翻,而且书一旦翻页了就不再见到封面和封底。这是因为书页的每一张纸都有两面,要处理起来涉及的设置是针对两张纸而不是一张(翻页后我们看到的是两张纸的各一面);同时还要处理两端的边界问题,这个边界与左翻、右翻以及回翻都有不同的关联,情况有些复杂。
我的极简多图+图片说明脚本,使用闭环的结构,把开头和结尾两个边界衔接起来,使得问题的解决简单化。书本可不行,不能翻到封底后整本书转个360度,这不不太符合现实,所以封面和封底的书页不能衔接在一处,也就是不能闭环,要独立处理两个边界。
JS有一个 return false 的做法可以在处理边界中使用。翻书分两个动作,一个向左翻,一个向右翻。向左翻,翻到封底,当前页为总纸张数,这就是封底方向的边界,右翻的边界是封面,数值为1;但这两个数根据按照数组读取则各减去一。当前页变量的步进会超越边界,每一次翻页都需要做判断并做相应处理,用几行代码应该可以搞定。
这个设想试了几次,已经成功大半(希望不仅仅是自我感觉)。
马黑黑 发表于 2022-4-30 23:25
其二:弹性翻页
所谓弹性翻页,此处指模拟现实翻书时的一些情形,如翻到指定页、翻到某一页是回翻,也许 ...
这么复杂的东东也被黑黑拿下了,厉害{:4_199:} 红影 发表于 2022-5-2 08:50
这么复杂的东东也被黑黑拿下了,厉害
其实它不复杂,只是要兼顾很多可能以及很多综合性的情形,然后这个逻辑就不是很容易确定。实际上,实现弹性翻页并没有增加代码里,只在算法里下功夫 马黑黑 发表于 2022-5-2 09:22
其实它不复杂,只是要兼顾很多可能以及很多综合性的情形,然后这个逻辑就不是很容易确定。实际上,实现弹 ...
我连单一的情形都弄不明白,兼顾得多的也只有你了{:4_173:} 红影 发表于 2022-5-2 10:51
我连单一的情形都弄不明白,兼顾得多的也只有你了
总要考虑些东东吧
马黑黑 发表于 2022-5-2 11:32
总要考虑些东东吧
想考虑,没本事考虑呀{:4_173:} 红影 发表于 2022-5-2 14:36
想考虑,没本事考虑呀
每一个人考虑的角度不一样而已