0.效果
1.使用
1-1.引用
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="plugs/toly-span/span.css">
1-2.使用
<script src="plugs/toly-span/span.js"></script>
<script>
$(function () {
new Span();
});
</script>
1-3.html的结构:
<
div class=
"container">
<!
<
div toly-span-
id=
"1" id=
"active">Page1</
div>
<
div toly-span-
id=
"2">Page2</
div>
<
div toly-span-
id=
"3">Page3</
div>
<
div toly-span-
id=
"4">Page4</
div>
<
div toly-span-
id=
"5">Page5</
div>
<
div toly-span-
id=
"6">Page6</
div>
<
div toly-span-
id=
"7">Page7</
div>
<
div toly-span-
id=
"8">Page8</
div>
<
div toly-span-
id=
"9">Page9</
div>
<
div toly-span-
id=
"10">Page10</
div>
<
div toly-span-
id=
"11">Page11</
div>
<
div toly-span-
id=
"12">Page12</
div>
<
div toly-span-
id=
"13">Page13</
div>
<
div toly-span-
id=
"14">Page14</
div>
<
div toly-span-
id=
"15">Page15</
div>
<
div toly-span-
id=
"16">Page16</
div>
<
div toly-span-
id=
"17">Page17</
div>
<
div toly-span-
id=
"18">Page18</
div>
<
div toly-span-
id=
"19">Page19</
div>
<
div toly-span-
id=
"20">Page20</
div>
</
div>
1-4.html的样式
.container {
width: 400px;
height: 400px;
background-color: aquamarine;
border: 1px solid red;
margin: 0 auto;
text-align: center;
}
额外说一下,三个配置参数
$(
function () {
new Span({
MaxLength:
10,
slh_p:
'<<',
slh_n:
'>>'
});
});
源码详见: link:https://github.com/toly1994328/toly-span.git
到这就能实现上面的效果了。本人写的插件源码见下:
span.js
(
function ($) {
var Span =
function (options) {
var self =
this;
this.dotCount =
0;
this.options = {
MaxLength:
10,
slh_p:
'p...',
slh_n:
'...n'
};
$.extend(
this.options, options || {});
var $spans = $(
'[toly-span-id]');
var $activeSpans = $(
'#active');
$activeSpans.show();
this.spanDiv = $(
'<div id="span0-bar">');
this.bodyNode = $(document.body);
this.renderDOM($spans.length);
this.handleIgnore($spans.length);
this.handleClick(
this, $spans.length);
$(window).keyup(
function (e) {
var keyValue = e.keyCode;
if (keyValue ===
37 || keyValue ===
38) {
self.toPer($spans.length);
}
if (keyValue ===
39 || keyValue ===
40) {
self.toNext($spans.length);
}
})
};
Span.prototype = {
expande:
function (num) {
this.dotCount++;
$(
'a').show();
var $a = $(
'#span0-bar a');
for (
var i =
0; i < $a.length; i++) {
var $ai = $($a[i]);
try {
var aiid =
parseInt($ai.attr(
"toly-a-id"));
}
catch (e) {
}
var number =
this.options.MaxLength *
this.dotCount;
if (aiid < number || (aiid > number +
this.options.MaxLength && aiid != num)) {
$ai.hide();
$($a[num]).text(
this.options.slh_n);
}
}
var $showItem = $(
'a:not([style="display: none;"])');
console.log($showItem.length);
if ($showItem.length<=
this.options.MaxLength+
4) {
$($showItem[
1]).text(
this.options.slh_p)
}
if ($showItem.length <
this.options.MaxLength+
3) {
$($a[num]).text(num);
}
},
close:
function (num) {
this.dotCount--;
$(
'a').show();
var $a = $(
'#span0-bar a');
for (
var i =
0; i < $a.length; i++) {
var $ai = $($a[i]);
try {
var aiid =
parseInt($ai.attr(
"toly-a-id"));
}
catch (e) {
}
var number =
this.options.MaxLength *
this.dotCount;
if (aiid < number || (aiid > number +
this.options.MaxLength && aiid != num)) {
$ai.hide();
$($a[num]).text(
this.options.slh_n);
}
}
var $showItem = $(
'a:not([style="display: none;"])');
$($showItem[
1]).text(
this.options.slh_p)
$($showItem[$showItem.length -
3]).text($($showItem[$showItem.length -
3]).attr(
"toly-a-id"));
$($a[
1]).text(
1);
},
handleIgnore:
function (num) {
var $activeItem = $(
'#active');
var currentId =
parseInt($activeItem.attr(
'toly-span-id'));
var $a = $(
'#span0-bar a');
$($a[num]).text(
this.options.slh_n);
for (
var i =
0; i < $a.length; i++) {
var $ai = $($a[i]);
try {
var aiid =
parseInt($ai.attr(
"toly-a-id"));
}
catch (e) {
}
if (aiid >
this.options.MaxLength && aiid < num) {
$ai.hide();
}
}
},
toNext:
function (num) {
var $activeItem = $(
'#active');
var currentId =
parseInt($activeItem.attr(
'toly-span-id'));
if (currentId === num) {
return;
}
var $selectItem = $(
'[toly-span-id=' + (currentId +
1) +
']');
$selectItem.show();
$activeItem.hide();
$activeItem.attr(
'id',
'no-active');
$selectItem.attr(
'id',
'active');
var $currentA = $(
'#span0-bar .active');
var currentAId =
parseInt($currentA.attr(
'toly-a-id'));
var $nextA = $(
'[toly-a-id=' + (currentAId +
1) +
']');
$currentA.removeClass(
'active');
$nextA.addClass(
'active');
if (currentAId +
1 >
this.options.MaxLength * (
this.dotCount +
1)) {
this.expande(num);
}
},
toPer:
function (num) {
var $activeItem = $(
'#active');
var currentId =
parseInt($activeItem.attr(
'toly-span-id'));
if (currentId ===
1) {
return;
}
var $selectItem = $(
'[toly-span-id=' + (currentId -
1) +
']');
$selectItem.show();
$activeItem.hide();
$activeItem.attr(
'id',
'no-active');
$selectItem.attr(
'id',
'active');
var $currentA = $(
'#span0-bar .active');
var currentAId =
parseInt($currentA.attr(
'toly-a-id'));
var $nextA = $(
'[toly-a-id=' + (currentAId -
1) +
']');
$currentA.removeClass(
'active');
$nextA.addClass(
'active');
console.log(
"{currentAId}--{" + (currentAId) +
"}");
console.log(
"{this.dotCount}--{" + (
this.dotCount) +
"}");
if (currentAId-
2 <
this.options.MaxLength * (
this.dotCount)) {
this.close(num);
}
},
toHere:
function (innerText, a) {
var $activeItem = $(
'#active');
var $selectItem = $(
'[toly-span-id=' + innerText +
']');
var activedId = $activeItem.attr(
'toly-span-id');
if (innerText != activedId) {
$selectItem.show();
$(
'#active').hide();
$(
'#active').attr(
'id',
'no-active');
$selectItem.attr(
'id',
'active');
$(
'.active').removeClass(
'active');
$(a).addClass(
'active');
}
},
renderDOM:
function (num) {
var perBtn =
'<a class="span1-btn-pre"><</a>';
var nextBtn =
'<a class="span1-btn-next">></a>';
var innerli =
'';
for (
var i =
1; i <= num; i++) {
var innerli_a =
'<a >';
innerli_a += i;
var innerli_z =
'</a>\n';
innerli_a += innerli_z;
innerli += innerli_a;
}
var spanDivDom =
' <ul>\n' +
' <li>\n' + perBtn + innerli + nextBtn +
' </li>\n' +
' </ul>';
this.spanDiv.html(spanDivDom);
this.bodyNode.append(
this.spanDiv);
var $a = $(
'#span0-bar a');
for (
var i =
0; i < $a.length; i++) {
$($a[i]).attr(
"toly-a-id", $($a[i]).text());
}
$(
'[toly-a-id=1]').addClass(
'active')
},
handleClick:
function (self, num) {
$(
'a').click(
function (e) {
var innerText = e.target.innerText;
console.log(self.options.slh_n);
switch (innerText) {
case '>':
self.toNext(num);
break;
case '<':
self.toPer(num);
break;
case self.options.slh_n:
self.expande(num);
break;
case self.options.slh_p:
self.close(num);
break;
default:
self.toHere(innerText,
this);
break;
}
});
$(
'a').mouseenter(
function (e) {
$(
this).addClass(
'hover');
});
$(
'a').mouseleave(
function (e) {
$(
this).removeClass(
'hover');
})
},
};
window[
"Span"] = Span;
})(jQuery);
span.css()
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font: inherit;
font-size: 100%;
vertical-align: baseline;
}
html {
line-height: 1;
}
ol,
ul {
list-style: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
caption,
th,
td {
text-align: left;
font-weight: normal;
vertical-align: middle;
}
q,
blockquote {
quotes: none;
}
q:before,
q:after,
blockquote:before,
blockquote:after {
content: "";
content: none;
}
a img {
border: none;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
#span0-bar {
position: relative;
height: 50px;
width: 900px;
margin: 20px auto;
text-align: center;
}
#span0-bar ul {
display: inline;
}
#span0-bar ul li {
height: 50px;
}
#span0-bar ul li a {
height: 40px;
width: 40px;
background: ghostwhite;
padding: 10px;
border-radius: 3px;
margin-left: 10px;
}
#span0-bar ul li a.active {
background: #ACBFED;
color: #F85353;
-moz-box-shadow: 2px -2px 2px gray inset;
-webkit-box-shadow: 2px -2px 2px gray inset;
box-shadow: 2px -2px 2px gray inset;
}
#span0-bar ul li a.hover {
background: #ACBFED;
}
[toly-span-id] {
display: none;
}
转载于:https://www.cnblogs.com/toly-top/p/9782013.html
相关资源:FlutterUnit:【Flutter集录指南应用】Flutter的统一,编码器的统一-源码