使用 Swiper 创建水平可拖动列表
Creating horizontal draggable list using Swiper
我正在尝试创建一个可以拖动的项目(文本)的水平列表:
var scroll = new Swiper('#scroll-tags', {
slidesPerView: 'auto',
freeMode: true,
scrollbar: {
el: '.swiper-scrollbar',
draggable: true,
dragSize: 100,
},
mousewheel: true,
});
标记:
<div class="swiper-container" id="scroll-tags">
<div class="swiper-wrapper">
<div class="swiper-slide">
<ul class="tags-list">
<li><a href="">Item 1</a></li>
<li><a href="">Item 2</a></li>
<li><a href="">Item 3</a></li>
...
</ul>
</div>
</div>
<div class="swiper-scrollbar"></div>
</div>
还有一些 CSS:
.tags-list {
display: flex;
align-items: center;
white-space: nowrap;
}
我的问题:1. 滚动条不工作; 2.当我拖放时,列表回到原来的位置。
修改答案,现在我明白你想要什么了。我将演示与您的 fiddle 合并并进行了一些更改
- 将滑动条方向更改为水平:
direction: 'horizontal',
- 更改幻灯片的宽度以适合列表(这是关键):
.swiper-slide { width: auto;
- 明确显示滚动条(可选但很重要):
$('.swiper-scrollbar').show();
下面是完整的工作代码
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">
<script src="js/jquery-3.4.1.min.js"></script>
<link href="css/swiper.min.css" rel="stylesheet" />
<style>
html,
body {
position: relative;
height: 100%;
}
body {
background: #fff;
color: #000;
margin: 0;
padding: 0;
}
.swiper-container {
width: 100%;
height: 100%;
}
.swiper-slide {
font-size: 18px;
height: auto;
width: auto;
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 30px;
}
.swiper-container {
overflow-x: hidden;
}
ul {
margin: 0;
padding: 0;
list-style-type: none;
display: flex;
align-items: center;
white-space: nowrap;
}
li {
margin: 0.25rem 0.75rem 0.25rem 0;
}
a {
display: block;
color: #fff;
border-radius: 50px;
padding: 0.25rem 1rem;
background-color: gray;
font-size: 18px;
border: solid 1px gray;
}
</style>
<script>
$(document).ready(function () {
var swiper = new Swiper('#scroll-tags', {
direction: 'horizontal',
slidesPerView: 'auto',
freeMode: true,
scrollbar: {
el: '.swiper-scrollbar',
},
mousewheel: true,
});
$('.swiper-scrollbar').show();
});
</script>
</head>
<body>
<div class="swiper-container" id="scroll-tags">
<div class="swiper-wrapper">
<div class="swiper-slide">
<ul class="tags-list">
<li><a href="">Item 1</a></li>
<li><a href="">Item 2</a></li>
<li><a href="">Item 3</a></li>
<li><a href="">Item 4</a></li>
<li><a href="">Item 5</a></li>
<li><a href="">Item 6</a></li>
<li><a href="">Item 7</a></li>
<li><a href="">Item 8</a></li>
<li><a href="">Item 9</a></li>
<li><a href="">Item 10</a></li>
<li><a href="">Item 11</a></li>
<li><a href="">Item 12</a></li>
</ul>
</div>
</div>
<div class="swiper-scrollbar"></div>
</div>
<script src="js/swiper.min.js"></script>
</body>
</html>
CSS解决方案
对于简单的可拖动菜单,不需要 Swiper (Overkill)。
当您将溢出设置为滚动(或自动)时 - 移动设备上的滚动条看起来很棒。
.scroll {
white-space: nowrap;
overflow-x: auto;
}
- https://www.w3schools.com/howto/howto_css_menu_horizontal_scroll.asp
- https://iamsteve.me/blog/entry/horizontal-scrolling-responsive-menu
Swiper 水平滚动方向基于幻灯片(CSS 选择器是 .swiper-container-vertical
)。
刷卡解决方案
使用 幻灯片(没有一张长幻灯片 overflow:auto
)
**再次 "overkill"
https://codepen.io/ezra_siton/pen/PoYVBqZ
var swiper = new Swiper(".swiper-container", {
slidesPerView: "auto",
freeMode: true,
slideToClickedSlide: true,
spaceBetween: 10,
scrollbar: {
el: ".swiper-scrollbar",
draggable: true,
dragSize: 100
},
mousewheel: true
});
html,
body {
position: relative;
height: 100%;
}
body {
background: #fff;
font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
font-size: 34px;
color: #000;
margin: 0;
padding: 0;
}
.swiper-container {
width: 100%;
height: auto;
padding-bottom: 15px!important; /*space for the scrollbar*/
}
.swiper-slide {
width: auto!important; /*remove all important from your code*/
background-color: #333;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
}
li {
border-radius: 30px;
}
li a {
display: block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
/* Change the link color to #111 (black) on hover */
li:hover {
background-color: #111;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.1/css/swiper.min.css" rel="stylesheet"/>
<br>
<div class="swiper-container" id="scroll-tags">
<ul class="swiper-wrapper">
<li class="swiper-slide"><a href="#">item 1</a></li>
<li class="swiper-slide"><a href="#">item 2</a></li>
<li class="swiper-slide"><a href="">item 3</a></li>
<li class="swiper-slide"><a href="#">item 4</a></li>
<li class="swiper-slide"><a href="#">item 5</a></li>
<li class="swiper-slide"><a href="#">item 6</a></li>
<li class="swiper-slide"><a href="#">item 7</a></li>
<li class="swiper-slide"><a href="#">item 8</a></li>
<li class="swiper-slide"><a href="#">item 9</a></li>
<li class="swiper-slide"><a href="#">item 10</a></li>
<li class="swiper-slide"><a href="#">item 11</a></li>
<li class="swiper-slide"><a href="#">item 12</a></li>
<li class="swiper-slide"><a href="#">item 13</a></li>
<li class="swiper-slide"><a href="#">item 14</a></li>
<li class="swiper-slide"><a href="#">item 15</a></li>
<li class="swiper-slide"><a href="#">item 16</a></li>
<li class="swiper-slide"><a href="#">item 17</a></li>
<li class="swiper-slide"><a href="#">item 18</a></li>
<li class="swiper-slide"><a href="#">item 19</a></li>
<li class="swiper-slide"><a href="#">item 20</a></li>
</ul>
<div class="swiper-scrollbar"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.1/js/swiper.min.js"></script>
Swiper "bad" 一张长幻灯片
同样很奇怪(基于幻灯片的滑动能力)- 但也可以工作
var swiper = new Swiper(".swiper-container", {
slidesPerView: "auto",
freeMode: true,
slideToClickedSlide: true,
spaceBetween: 20,
scrollbar: {
el: ".swiper-scrollbar",
draggable: true
},
mousewheel: true
});
//horizontal
html,
body {
position: relative;
height: 100%;
}
body {
background: #fff;
font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
font-size: 34px;
color: #000;
margin: 0;
padding: 0;
}
.swiper-container {
width: 100%;
height: auto;
padding-bottom: 30px!important; /*space for the scrollbar*/
}
.swiper-slide {
width: auto!important;;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
}
a {
background-color: #333;
}
a {
color: white;
text-align: center;
padding: 10px 40px;
text-decoration: none;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.1/css/swiper.min.css" rel="stylesheet"/>
<br>
<div class="swiper-container" id="scroll-tags">
<ul class="swiper-wrapper">
<div class="swiper-slide">
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
</div>
</ul>
<div class="swiper-scrollbar"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.1/js/swiper.min.js"></script>
我正在尝试创建一个可以拖动的项目(文本)的水平列表:
var scroll = new Swiper('#scroll-tags', {
slidesPerView: 'auto',
freeMode: true,
scrollbar: {
el: '.swiper-scrollbar',
draggable: true,
dragSize: 100,
},
mousewheel: true,
});
标记:
<div class="swiper-container" id="scroll-tags">
<div class="swiper-wrapper">
<div class="swiper-slide">
<ul class="tags-list">
<li><a href="">Item 1</a></li>
<li><a href="">Item 2</a></li>
<li><a href="">Item 3</a></li>
...
</ul>
</div>
</div>
<div class="swiper-scrollbar"></div>
</div>
还有一些 CSS:
.tags-list {
display: flex;
align-items: center;
white-space: nowrap;
}
我的问题:1. 滚动条不工作; 2.当我拖放时,列表回到原来的位置。
修改答案,现在我明白你想要什么了。我将演示与您的 fiddle 合并并进行了一些更改
- 将滑动条方向更改为水平:
direction: 'horizontal',
- 更改幻灯片的宽度以适合列表(这是关键):
.swiper-slide { width: auto;
- 明确显示滚动条(可选但很重要):
$('.swiper-scrollbar').show();
下面是完整的工作代码
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">
<script src="js/jquery-3.4.1.min.js"></script>
<link href="css/swiper.min.css" rel="stylesheet" />
<style>
html,
body {
position: relative;
height: 100%;
}
body {
background: #fff;
color: #000;
margin: 0;
padding: 0;
}
.swiper-container {
width: 100%;
height: 100%;
}
.swiper-slide {
font-size: 18px;
height: auto;
width: auto;
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 30px;
}
.swiper-container {
overflow-x: hidden;
}
ul {
margin: 0;
padding: 0;
list-style-type: none;
display: flex;
align-items: center;
white-space: nowrap;
}
li {
margin: 0.25rem 0.75rem 0.25rem 0;
}
a {
display: block;
color: #fff;
border-radius: 50px;
padding: 0.25rem 1rem;
background-color: gray;
font-size: 18px;
border: solid 1px gray;
}
</style>
<script>
$(document).ready(function () {
var swiper = new Swiper('#scroll-tags', {
direction: 'horizontal',
slidesPerView: 'auto',
freeMode: true,
scrollbar: {
el: '.swiper-scrollbar',
},
mousewheel: true,
});
$('.swiper-scrollbar').show();
});
</script>
</head>
<body>
<div class="swiper-container" id="scroll-tags">
<div class="swiper-wrapper">
<div class="swiper-slide">
<ul class="tags-list">
<li><a href="">Item 1</a></li>
<li><a href="">Item 2</a></li>
<li><a href="">Item 3</a></li>
<li><a href="">Item 4</a></li>
<li><a href="">Item 5</a></li>
<li><a href="">Item 6</a></li>
<li><a href="">Item 7</a></li>
<li><a href="">Item 8</a></li>
<li><a href="">Item 9</a></li>
<li><a href="">Item 10</a></li>
<li><a href="">Item 11</a></li>
<li><a href="">Item 12</a></li>
</ul>
</div>
</div>
<div class="swiper-scrollbar"></div>
</div>
<script src="js/swiper.min.js"></script>
</body>
</html>
CSS解决方案
对于简单的可拖动菜单,不需要 Swiper (Overkill)。 当您将溢出设置为滚动(或自动)时 - 移动设备上的滚动条看起来很棒。
.scroll {
white-space: nowrap;
overflow-x: auto;
}
- https://www.w3schools.com/howto/howto_css_menu_horizontal_scroll.asp
- https://iamsteve.me/blog/entry/horizontal-scrolling-responsive-menu
Swiper 水平滚动方向基于幻灯片(CSS 选择器是 .swiper-container-vertical
)。
刷卡解决方案
使用 幻灯片(没有一张长幻灯片 overflow:auto
)
**再次 "overkill"
https://codepen.io/ezra_siton/pen/PoYVBqZ
var swiper = new Swiper(".swiper-container", {
slidesPerView: "auto",
freeMode: true,
slideToClickedSlide: true,
spaceBetween: 10,
scrollbar: {
el: ".swiper-scrollbar",
draggable: true,
dragSize: 100
},
mousewheel: true
});
html,
body {
position: relative;
height: 100%;
}
body {
background: #fff;
font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
font-size: 34px;
color: #000;
margin: 0;
padding: 0;
}
.swiper-container {
width: 100%;
height: auto;
padding-bottom: 15px!important; /*space for the scrollbar*/
}
.swiper-slide {
width: auto!important; /*remove all important from your code*/
background-color: #333;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
}
li {
border-radius: 30px;
}
li a {
display: block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
/* Change the link color to #111 (black) on hover */
li:hover {
background-color: #111;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.1/css/swiper.min.css" rel="stylesheet"/>
<br>
<div class="swiper-container" id="scroll-tags">
<ul class="swiper-wrapper">
<li class="swiper-slide"><a href="#">item 1</a></li>
<li class="swiper-slide"><a href="#">item 2</a></li>
<li class="swiper-slide"><a href="">item 3</a></li>
<li class="swiper-slide"><a href="#">item 4</a></li>
<li class="swiper-slide"><a href="#">item 5</a></li>
<li class="swiper-slide"><a href="#">item 6</a></li>
<li class="swiper-slide"><a href="#">item 7</a></li>
<li class="swiper-slide"><a href="#">item 8</a></li>
<li class="swiper-slide"><a href="#">item 9</a></li>
<li class="swiper-slide"><a href="#">item 10</a></li>
<li class="swiper-slide"><a href="#">item 11</a></li>
<li class="swiper-slide"><a href="#">item 12</a></li>
<li class="swiper-slide"><a href="#">item 13</a></li>
<li class="swiper-slide"><a href="#">item 14</a></li>
<li class="swiper-slide"><a href="#">item 15</a></li>
<li class="swiper-slide"><a href="#">item 16</a></li>
<li class="swiper-slide"><a href="#">item 17</a></li>
<li class="swiper-slide"><a href="#">item 18</a></li>
<li class="swiper-slide"><a href="#">item 19</a></li>
<li class="swiper-slide"><a href="#">item 20</a></li>
</ul>
<div class="swiper-scrollbar"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.1/js/swiper.min.js"></script>
Swiper "bad" 一张长幻灯片
同样很奇怪(基于幻灯片的滑动能力)- 但也可以工作
var swiper = new Swiper(".swiper-container", {
slidesPerView: "auto",
freeMode: true,
slideToClickedSlide: true,
spaceBetween: 20,
scrollbar: {
el: ".swiper-scrollbar",
draggable: true
},
mousewheel: true
});
//horizontal
html,
body {
position: relative;
height: 100%;
}
body {
background: #fff;
font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
font-size: 34px;
color: #000;
margin: 0;
padding: 0;
}
.swiper-container {
width: 100%;
height: auto;
padding-bottom: 30px!important; /*space for the scrollbar*/
}
.swiper-slide {
width: auto!important;;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
}
a {
background-color: #333;
}
a {
color: white;
text-align: center;
padding: 10px 40px;
text-decoration: none;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.1/css/swiper.min.css" rel="stylesheet"/>
<br>
<div class="swiper-container" id="scroll-tags">
<ul class="swiper-wrapper">
<div class="swiper-slide">
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
<a href="#">Very long item</a>
</div>
</ul>
<div class="swiper-scrollbar"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.1/js/swiper.min.js"></script>