前提・実現したいこと
jqueryプラグイン slickで、右側にメイン画像が来るようなスライドを作っています。
メインスライド(.slick-current)の位置、大きさだけ他スライドと異なるためcssで指定しています。
右方向スライド時に動きがカクついてしまうため、
スムーズにスライドさせるにはどうすればいいか教えていただきたいです。
発生している問題・エラーメッセージ
スライドを「<」矢印で左方向に流しているときは問題なくスムーズに動くのですが、
「>」で右方向に動かすと、以下のような動きが生じます。
・幅1920pxのとき→ メインスライド(.slick-current)が定位置以上に行き過ぎてから戻る
・幅980pxのとき→ メインスライド(.slick-current)が定位置前で一時停止してから戻る
検証ツールで確認したところ、.slick-trackが右方向スライド時に一度大きく右に移動してから少し戻る、といった挙動をしております。
該当のソースコード
<body class="top">
<div class="kv__wrapper">
<ul class="kv__slide js-kv__slide" dir="rtl">
<li>
<a href="#" class="kv__thumb"><img src="https://placehold.jp/595x476.png" alt=""></a>
</li>
<li>
<a href="#" class="kv__thumb"><img src="https://placehold.jp/595x476.png" alt=""></a>
</li>
<li>
<a href="#" class="kv__thumb"><img src="https://placehold.jp/595x476.png" alt=""></a>
</li>
<li>
<a href="#" class="kv__thumb"><img src="https://placehold.jp/595x476.png" alt=""></a>
</li>
<li>
<a href="#" class="kv__thumb"><img src="https://placehold.jp/595x476.png" alt=""></a>
</li>
<li>
<a href="#" class="kv__thumb"><img src="https://placehold.jp/595x476.png" alt=""></a>
</li>
</ul>
</div>
</body>
.top .kv__wrapper {
position: relative;
}
@media (min-width: 769px) {
.top .kv__slide {
z-index: 10000;
}
}
.top .kv__slide .slick-arrow {
text-indent: 100%;
white-space: nowrap;
overflow: hidden;
width: 27px;
height: 27px;
border-right: 2px solid #000;
border-top: 2px solid #000;
position: absolute;
transform: rotate(-135deg);
bottom: 17%;
left: 100px;
z-index: 500;
}
@media (min-width: 769px) {
.top .kv__slide .slick-arrow {
bottom: 12%;
width: 70px;
height: 70px;
}
}
.top .kv__slide .slick-track {
padding-bottom: 55%;
}
@media (min-width: 769px) {
.top .kv__slide .slick-track {
padding-bottom: 40%;
}
}
@media (min-width: 1280px) {
.top .kv__slide .slick-track {
padding-bottom: 70px;
}
}
.top .kv__slide .slick-list {
height: 100%;
padding: 0 0 0 28.6% !important;
}
@media (min-width: 769px) {
.top .kv__slide .slick-list {
padding: 0 0 0 400px !important;
}
}
@media (min-width: 1280px) {
.top .kv__slide .slick-list {
padding: 0 !important;
}
}
.top .kv__slide .slick-list .slick-slide {
position: relative;
bottom: -140px;
transition: 0.3s;
width: 80vw;
}
@media (min-width: 769px) {
.top .kv__slide .slick-list .slick-slide {
bottom: -290px;
width: auto;
}
}
@media (min-width: 1280px) {
.top .kv__slide .slick-list .slick-slide {
bottom: -320px;
margin-right: 30px;
}
}
.top .kv__slide .slick-list .slick-slide .kv__cap {
display: none;
font-size: 4.8rem;
}
@media (min-width: 769px) {
.top .kv__slide .slick-list .slick-slide .kv__thumb {
width: 100%;
}
}
@media (min-width: 769px) {
.top .kv__slide .slick-list .slick-slide .kv__thumb img {
width: 100%;
}
}
.top .kv__slide .slick-list .slick-slide.slick-current {
transform: translateY(-135px);
z-index: 200;
margin-left: -20px;
}
@media (min-width: 769px) {
.top .kv__slide .slick-list .slick-slide.slick-current {
transform: translateY(-290px);
width: calc(100vw - 400px) !important;
margin-left: -70px;
}
}
@media (min-width: 1280px) {
.top .kv__slide .slick-list .slick-slide.slick-current {
max-width: 880px;
width: 100%;
transform: translateY(-316px);
}
}
.top .kv__slide .slick-list .slick-slide.slick-current .kv__thumb {
border-radius: 5px 0 0 5px;
overflow: hidden;
-moz-box-shadow: -5px 10px 18px 5px rgba(0, 0, 0, 0.36);
-webkit-box-shadow: -5px 10px 18px 5px rgba(0, 0, 0, 0.36);
-ms-box-shadow: -5px 10px 18px 5px rgba(0, 0, 0, 0.36);
box-shadow: -5px 10px 18px 5px rgba(0, 0, 0, 0.36);
}
@media (min-width: 1280px) {
.top .kv__slide .slick-list .slick-slide.slick-current .kv__thumb {
border-radius: 10px 0 0 10px;
}
}
$(function(){
$('.js-kv__slide').slick({
mobileFirst: true,
rtl: true,
infinite: true,
arrows: true,
slidesToShow: 1,
slidesToScroll: 1,
variableWidth: true,
});
});
試したこと
心当たりがあるとすれば、スライドにvariableWidthを指定している点です。
メインスライド(.slick-current)にmax-width: 880pxを指定しており、
またスマホ時にスライドの幅を固定にするため、オプションでvariableWidth: trueを指定しています。
PC時にvariableWidthをfalseにすると動きに問題はなくなるのですが、なぜかスライドが2段になってしまうためPCでもtrueにしておりました。
variableWidthをfalseにし、1段で表示されれば一番良いのかもしれませんが、2段になってしまう原因がわからない状態です。
ご教授いただければ幸いです。
補足情報(FW/ツールのバージョンなど)
jqueryのバージョンは2.2.4、slickは1.8.1です。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
カクつく原因は単純に
.slick-current
に対してスタイルをかけているところにあります。
動きが完了したタイミングで.slick-current
が付与されるので、そこでCSSが適用され、急な移動につながります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2021/02/25 10:18
知識不足で恐縮ですが、質問させてください。
.slick-currentにスタイルを効かせるのは下記のサイトを参考にしたのですが、
そちらでは左右にスライドさせても問題なく作動しています。
https://www.nxworld.net/jquery-plugin-slick-current-class-examples.html
classが付与されるタイミングですと左右で違いが出ないのではと思うのですが、
左にスライドさせる時は問題なく、右の時だけ急な動きになってしまうのはのはなぜでしょうか?
スライド自体が右寄せだからでしょうか。