-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmorebox.js
83 lines (73 loc) · 2.28 KB
/
morebox.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
const _serviceMethods = {
getMaxNumber: $numberArray => {
let max = 0;
for (let number of $numberArray) {
if (number > max) {
max = number;
}
}
return max;
}
};
const _moreboxMethods = {
getSingleLevelItemHeight: $items => {
let firstItem = $items.filter(":first"),
firstItemTop = firstItem.offset().top,
arr = [];
$items.each(function() {
let _thisItem = $(this),
thisItemTop = _thisItem.offset().top;
if (thisItemTop === firstItemTop) {
let height = _thisItem.outerHeight();
arr.push(height);
}
});
return arr;
},
initHeightToggle: ($btn, $btnText, $contentBox, $heightMax, $heightMin) => {
$btn.on("click", function() {
let _thisBtn = $(this),
textOfThis = _thisBtn.text();
if (textOfThis === $btnText) {
_thisBtn.text("Hide");
$contentBox.css({
"max-height": $heightMax
});
} else {
_thisBtn.text($btnText);
$contentBox.css({
"max-height": $heightMin
});
}
});
}
};
let morebox = $container => {
$container.each(function() {
let _container = $(this),
content = _container.find("[data-morebox-content]"),
contentItem = content.find("[data-morebox-item]"),
button = _container.find("[data-morebox-btn]"),
buttonOriginText = button.text(),
contentHeight = content.outerHeight(),
contentItemsHeights = _moreboxMethods.getSingleLevelItemHeight(
contentItem
),
contentItemMaxHeight = _serviceMethods.getMaxNumber(
contentItemsHeights
);
content.css({
"max-height": contentItemMaxHeight,
overflow: "hidden",
transition: "max-height 0.2s"
});
_moreboxMethods.initHeightToggle(
button,
buttonOriginText,
content,
contentHeight,
contentItemMaxHeight
);
});
};
morebox($("[data-morebox]"));