#coding:utf-8
total_pages=11
current_page=10
a=(1..total_pages).to_a
#<div class="page_box"><span><font>&laquo;首页</font></span><span><font>­上一页</font></span>
#<span id="page_on"><font>1</font></span>
#<span><a href="" >2</a></span>
#<span><a href="" >3</a></span>
#<span><a href="" >4</a></span>
#<span><a href="" >5</a></span>
#<span><a href="" >...</a></span>
#<span><a href="" >11</a></span>
#<span><a href="">­下一页</a></span>
#<span><a href="" >­尾页&raquo;</a></span>
#<span><font>1/共11页</font></span>
#</div>
#r=[]
#if current_page-5>0
#  r<<"1"
#  r<<"..."+(current_page-3).to_s
#  r<<current_page-2
#  r<<current_page-1
#  r<<current_page
#  if current_page+1<=total_pages
#    r<<current_page+1
#  end
#  if current_page+2<==total_pages
#    r<<current_page+2
#  end
#else
#  r.concat((1...current_page).to_a)
#end
#r<<current_page
#if current_page+5<=total_pages
#  r<<current_page+1
#  r<<current_page+2
#  r<<"..."+(current_page+3).to_s
#else
#  r.concat(((current_page+1)..total_pages).to_a)
#end
#
#
#
#puts r
#r=[]
#r<<current_page
#if current_page-2>0
#  r.unshift current_page-1
#  
#end
#if current_page-5>0 and current_page+2<=total_pages
#  a[1..
#end
#puts a
r=[]
if total_pages<=6
r.concat((1..total_pages).to_a)
else
if current_page-5>0
if current_page+2<=total_pages
a.delete_if{|x| x< current_page-2}
elsif current_page+1<=total_pages
a.delete_if{|x| x<current_page-3}
elsif current_page<=total_pages
a.delete_if{|x| x<current_page-4}
end
end
if current_page+5>0
if current_page-2>0
a.delete_if{|x| x >current_page+2}
elsif current_page-1>0
a.delete_if{|x| x>current_page+3}
elsif current_page>0
a.delete_if{|x| x>current_page+4}
end
end
end
if a.first!=1
a.unshift "..."
a.unshift 1
end
if a.last!=total_pages
a<<"..."
a<<total_pages
end
puts a
我也是费了好久,快要penkui了,可以看到注释的部分我也是很糊,另外也有对ruby的函数不熟悉,(这个是借口,主要是脑子不好使)
效果参见ecshop的分页效果,
实现如下效果
«首页­上一页1...1415161718­下一页­尾页»17/共18页
«首页­上一页1...1415161718­下一页­尾页»18/共18页
«首页­上一页12345...18­下一页­尾页»1/共18页
«首页­上一页123456...18­下一页­尾页»4/共18页
«首页­上一页1...45678...18­下一页­尾页»6/共18页
«首页­上一页1­下一页­尾页»1/共1页
之前blog有一篇有python写的分页,比这个简单,可以算是这个的子集

最终的代码

#coding:utf-8

total_pages=11

current_page=10

a=(1..total_pages).to_a

#<div class="page_box"><span><font>&laquo;首页</font></span><span><font>­上一页</font></span>

#<span id="page_on"><font>1</font></span>

#<span><a href="" >2</a></span>

#<span><a href="" >3</a></span>

#<span><a href="" >4</a></span>

#<span><a href="" >5</a></span>

#<span><a href="" >...</a></span>

#<span><a href="" >11</a></span>

#<span><a href="">­下一页</a></span>

#<span><a href="" >­尾页&raquo;</a></span>

#<span><font>1/共11页</font></span>

#</div>

#r=[]

#if current_page-5>0

#  r<<"1"

#  r<<"..."+(current_page-3).to_s

#  r<<current_page-2

#  r<<current_page-1

#  r<<current_page

#  if current_page+1<=total_pages

#    r<<current_page+1

#  end

#  if current_page+2<==total_pages

#    r<<current_page+2

#  end

#else

#  r.concat((1...current_page).to_a)

#end

#r<<current_page

#if current_page+5<=total_pages

#  r<<current_page+1

#  r<<current_page+2

#  r<<"..."+(current_page+3).to_s

#else

#  r.concat(((current_page+1)..total_pages).to_a)

#end

#

#

#

#puts r

#r=[]

#r<<current_page

#if current_page-2>0

#  r.unshift current_page-1

#

#end

#if current_page-5>0 and current_page+2<=total_pages

#  a[1..

#end

#puts a

if total_pages>6

if current_page-5>0

if current_page+2<=total_pages

a.delete_if{|x| x< current_page-2}

elsif current_page+1<=total_pages

a.delete_if{|x| x<current_page-3}

elsif current_page<=total_pages

a.delete_if{|x| x<current_page-4}

end

end

if current_page+5>0

if current_page-2>0

a.delete_if{|x| x >current_page+2}

elsif current_page-1>0

a.delete_if{|x| x>current_page+3}

elsif current_page>0

a.delete_if{|x| x>current_page+4}

end

end

end

if a.first!=1

a.unshift "..."

a.unshift 1

end

if a.last!=total_pages

a<<"..."

a<<total_pages

end

puts a

puts "----------"

pos=a.index(current_page)

def gen_link(page)

page=page.to_s

#拼接样式输出

%Q{<span><a href="">#{page}</a></span>}

end

r=[]

a.each_with_index do |elem,index|

page=elem

if elem=="..." and index<pos

page=a[a.index("...")+1]-1

end

if elem=="..." and index>pos

page=a[a.rindex("...")-1]+1

end

r<<gen_link(page)

end

#修改当前页的样式

r[pos]=%Q{<span id="page_on"><font>#{a[pos]}</font></span>}

if current_page==1

r.unshift %q{<span><font>­上一页</font></span>}

r.unshift %q{<span><font>&laquo;首页</font></span>}

r.unshift %q{<div class="page_box">}

else

page=current_page-1

r.unshift %Q{<span><a href="">上一页</a></span>}

r.unshift %Q{<span><a href="">首页</a></span>}

r.unshift %q{<div class="page_box">}

end

if current_page==total_pages

r<<%q{<span><a href="">­下一页</a></span>}

r<<%q{<span><a href="" >­尾页&raquo;</a></span>}

r<<%q{<span><font>1/共11页</font></span>}

r<<%q{</div>}

else

page=current_page+1

r<< %Q{<span><a href="">­下一页</a></span>}

r<< %Q{<span><a href="">­尾页&raquo;</a></span>}

r<<%q{</div>}

end

puts r

puts r.join("")

一个分页效果ruby版可作为面试题吧相关推荐

  1. 使用vue完成一个分页效果

    基于 element-ui 分页组件实现分页效果 效果如下: 使用说明: 0.首先在头部引入需要的外部文件 1.从element官方网页中复制想要的组件代码直接放入body中 2.编写逻辑代码 3.完 ...

  2. 原生JS实现分页效果

    做开发久了,会越来越依赖框架,毕竟利用框架可以快速的完成工作任务,如常见的分页效果,只需要与后端配合,由后端返回总页数和当前第几页这两个参数传给一些框架的分页功能,就可以轻松的实现分页效果,那如果在不 ...

  3. tiptap编辑器实现分页效果

    前言     项目需要实现在线报告的功能,由于业务需要,每一页内容都是有固定的模板的,所以每一页的内容不会超出,后台返回的报告内容就是一个数组,基于此数据结构实现类似于word的一样的分页效果,如果内 ...

  4. 如何用php实现分页效果

    分页效果在网页中是常见的,可是怎样才能实现分页呢,今天做了两种方法来实现一下分页的效果 首先,我们需要准备在数据库里面准备一个表,并且插入数据,这些都是必需的前提工作了,不多说,如图所示(库名为jer ...

  5. android 之ListView分页效果以及从网络上加载数据一系列的综合运用

    数据分页策略: <1>:用多少查多少 <2>:全部查询出来,再进行分页处理 数据分页的有关算法: (1):起始索引值 = (当前页-1)*每页显示的记录数 (2):结束索引值 ...

  6. pdo mysql分页_php运用PDO连接数据库,实现分页效果

    PDO是一个"数据库访问抽象层",作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,PDO更高 ...

  7. element 修改分页样式_如何给wordpress网站的文章列表,添加分页效果?可以通过2种方式...

    在上一章节中,我们为wordpress网站的首页添加了全站文章列表.一个wordpress网站不可能只有几篇文章,可能会有成千上万的文章,作为一个wordpress博客主题模板,一般情况下,不可能让所 ...

  8. rax+react hook 实现分页效果

    'use strict'; import { createElement, useState, useEffect, memo } from 'rax'; import View from 'rax- ...

  9. 给你一个K8S的“发行版”

    Kubernetes是Google开源的容器集群管理系统或者称为分布式操作系统.它构建在Docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于容 ...

最新文章

  1. biztalk 2010 映射
  2. 恢复快速启动中的“显示桌面”按钮
  3. 部署时服务端Excel的COM设置
  4. 如何画功能稳定,美观的PCB?
  5. 计算机组成原理多层次的存储器,计算机组成原理多层次的存储器
  6. android Animator详解
  7. 【2019浙江省赛 - J】Welcome Party(并查集,bfs,优先队列,建图)
  8. Linux常用命令(超详细)
  9. Reg Organizer v8.75 注册表及系统清理优化工具
  10. 网络安全-应急响应之入侵排查篇及相关工具
  11. linux关闭监听端口命令,如何在Linux系统中监听和关闭端口
  12. 【技法操作】UI界面设计,用PS绘制录音页面教程
  13. 京东疯狂月薪36k程序员最新Java面试题(常见面试题及答案汇总)
  14. js:两种方法实现键盘按键控制
  15. 微信小程序实现地图导航功能
  16. 激活函数选取不当为什会造成梯度消失
  17. python为什么用号做注释符_Python 为什么用 # 号作注释符?
  18. 谁能拒绝一个会动的皮卡丘挂件
  19. bmp图像文件格式说明
  20. Unity地图分割组合时出现接缝的处理办法

热门文章

  1. 大数据之-入门_大数据部门业务流程分析---大数据之hadoop工作笔记0006
  2. 大数据_Hbase-原理说明_大数据存储_垂直拆表_水平拆表_动态列扩展---Hbase工作笔记0003
  3. Mycat安全_SQL拦截黑名单---MyCat分布式数据库集群架构工作笔记0034
  4. VC++工作笔记0003---C++中的explicit关键字
  5. ASP.Net学习笔记012--12ViewState初探
  6. C#.NET验证码智能识别学习笔记---04C#.Net图片操作
  7. android学习笔记---64_ListView数据异步加载与AsyncTask
  8. 使用示例之线程调用自身
  9. Setting the Background Image for a List Control
  10. spring相互依赖怎么解决_被问到Spring循环依赖怎么解决?秀给面试官看!内附图解...