创建看起来像 iOS7 select 菜单的菜单
Create menu that looks like iOS7 select menu
我正在尝试创建一个类似于 iOS7 上的 select 菜单的菜单。我一直在使用 jQuery,但我一直无法让它正常工作并且看起来不错。
有没有人设法做到这一点,或者您是否知道其他任何地方已经做到了,所以我可以看到一个例子?
这是我要创建的内容:
这是 iOS7 select 菜单:
好吧,这是一个相当复杂的项目,因为它涉及很多不同的东西,而且您还没有提供任何代码(还)。
因此,这里有一些想法可能会将您的项目推向正确的方向:
根据您的列表项的创建方式,给它们一些指示它们在列表中的位置的东西(比如在我的 ID 中:id="item-1"
等)
然后,在鼠标悬停时,浏览列表项并计算出它们与所选项的距离,例如 Math.abs(selectedNumber - listItemNumber)
然后应用您的样式更改,根据项目的距离进行缩放。
这是一个例子:
https://jsfiddle.net/svArtist/7fgqu428/
$(".item").hover(function(){
var curnum = $(this).attr("id").split("-").pop();
scaleItems(curnum);
}, function(){
reset();
});
function scaleItems(itemNum){
$(".item").each(function(){
var thisnum = $(this).attr("id").split("-").pop();
$(this).css("font-size", (10+25/(1+Math.abs(itemNum - thisnum)))+"px");
$(this).css("padding", (10+10/(1+Math.abs(itemNum - thisnum)))+"px 20px");
});
}
function reset(){
$(".item").each(function(){
$(this).css("font-size", "20px");
$(this).css("padding", "20px");
});
}
html{
height:100%;
}
body{
margin:0;
height:100%;
}
#wrapper{
height:100%;
background-color:#888;
}
#menu{
height:100%;
overflow-y:auto;
position:absolute;
left:0;
padding: 20px;
box-sizing:border-box;
background-color: rgba(255,255,255,0.5);
}
.item{
padding:20px;
font-family:Arial, sans-serif;
font-size:20px;
font-weight:300;
border-bottom:1px solid #888;
cursor:pointer;
white-space: nowrap;
}
*{
transition: all 0.5s;
}
.item:hover{
font-size: 30px;
font-weight:600;
background:#fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrapper">
<div id="menu">
<div id="item-1" class="item">
Item 1 asdfsf djfkdjf
</div>
<div id="item-2" class="item">
Item 2 asdfsf djfkdjf
</div>
<div id="item-3" class="item">
Item 3 lköjhkghf dghggjkx dcd
</div>
<div id="item-4" class="item">
Item 4 agh fkdjf
</div>
<div id="item-5" class="item">
Item 5 dfggds soidfhsd fsss
</div>
<div id="item-6" class="item">
Item 6 asdfsf djfkdjf
</div>
<div id="item-7" class="item">
Item 7 dfg dg jfhfgh sfdgh
</div>
</div>
</div>
到目前为止,这只使用了 font-size
和 margin
,但您应该明白了。
或者我也尝试了 transform: scale()
,但令人惊讶的是,这并没有那么顺利:
https://jsfiddle.net/svArtist/entw3mp1/
我正在尝试创建一个类似于 iOS7 上的 select 菜单的菜单。我一直在使用 jQuery,但我一直无法让它正常工作并且看起来不错。
有没有人设法做到这一点,或者您是否知道其他任何地方已经做到了,所以我可以看到一个例子?
这是我要创建的内容:
这是 iOS7 select 菜单:
好吧,这是一个相当复杂的项目,因为它涉及很多不同的东西,而且您还没有提供任何代码(还)。
因此,这里有一些想法可能会将您的项目推向正确的方向:
根据您的列表项的创建方式,给它们一些指示它们在列表中的位置的东西(比如在我的 ID 中:id="item-1"
等)
然后,在鼠标悬停时,浏览列表项并计算出它们与所选项的距离,例如 Math.abs(selectedNumber - listItemNumber)
然后应用您的样式更改,根据项目的距离进行缩放。
这是一个例子: https://jsfiddle.net/svArtist/7fgqu428/
$(".item").hover(function(){
var curnum = $(this).attr("id").split("-").pop();
scaleItems(curnum);
}, function(){
reset();
});
function scaleItems(itemNum){
$(".item").each(function(){
var thisnum = $(this).attr("id").split("-").pop();
$(this).css("font-size", (10+25/(1+Math.abs(itemNum - thisnum)))+"px");
$(this).css("padding", (10+10/(1+Math.abs(itemNum - thisnum)))+"px 20px");
});
}
function reset(){
$(".item").each(function(){
$(this).css("font-size", "20px");
$(this).css("padding", "20px");
});
}
html{
height:100%;
}
body{
margin:0;
height:100%;
}
#wrapper{
height:100%;
background-color:#888;
}
#menu{
height:100%;
overflow-y:auto;
position:absolute;
left:0;
padding: 20px;
box-sizing:border-box;
background-color: rgba(255,255,255,0.5);
}
.item{
padding:20px;
font-family:Arial, sans-serif;
font-size:20px;
font-weight:300;
border-bottom:1px solid #888;
cursor:pointer;
white-space: nowrap;
}
*{
transition: all 0.5s;
}
.item:hover{
font-size: 30px;
font-weight:600;
background:#fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrapper">
<div id="menu">
<div id="item-1" class="item">
Item 1 asdfsf djfkdjf
</div>
<div id="item-2" class="item">
Item 2 asdfsf djfkdjf
</div>
<div id="item-3" class="item">
Item 3 lköjhkghf dghggjkx dcd
</div>
<div id="item-4" class="item">
Item 4 agh fkdjf
</div>
<div id="item-5" class="item">
Item 5 dfggds soidfhsd fsss
</div>
<div id="item-6" class="item">
Item 6 asdfsf djfkdjf
</div>
<div id="item-7" class="item">
Item 7 dfg dg jfhfgh sfdgh
</div>
</div>
</div>
到目前为止,这只使用了 font-size
和 margin
,但您应该明白了。
或者我也尝试了 transform: scale()
,但令人惊讶的是,这并没有那么顺利:
https://jsfiddle.net/svArtist/entw3mp1/