私はそれを正しく理解していれば、私はあなたが以下のような何かをすることができると思う。
スニペット:
var scrollButton = document.getElementById('scroll');
var container = document.getElementsByClassName('container')[0];
var inner = document.getElementsByClassName('inner')[0];
var containerWidth = 0;
var containerMaxWidth = 0;
var totalDuration = 1;
var duration = 0.8;
var ease = Power2.easeInOut;
var direction = '';
var DIRECTION_LEFT = 'DIRECTION_LEFT';
var DIRECTION_RIGHT = 'DIRECTION_RIGHT';
var currProgress = 0;
var progressFactor = 0.2;
var tl = new TimelineMax({
paused: true
});
function initVariables() {
containerWidth = container.offsetWidth;
TweenMax.set(container, {
position: 'absolute',
width: 'auto'
});
containerMaxWidth = container.offsetWidth;
TweenMax.set(container, {
clearProps: 'all'
});
}
function initTimeline() {
tl.to(inner, totalDuration, {
x: -containerMaxWidth + containerWidth,
ease: Power0.easeNone
});
}
function initListeners() {
scrollButton.addEventListener('click', doScroll, false);
}
function doScroll() {
if (direction === DIRECTION_RIGHT) {
currProgress = currProgress - progressFactor;
} else {
currProgress = currProgress + progressFactor;
}
if (currProgress >= 1) {
currProgress = 1;
direction = DIRECTION_RIGHT;
} else if (currProgress <= 0) {
currProgress = 0;
direction = DIRECTION_LEFT;
}
TweenMax.to(tl, duration, {
progress: currProgress,
ease: ease
});
}
//
initVariables();
initTimeline();
initListeners();
.container {
width: 400px;
border: 1px solid green;
overflow: hidden;
}
.inner {
white-space: nowrap;
}
<script src="//cdnjs.cloudflare.com/ajax/libs/gsap/1.18.2/TweenMax.min.js"></script>
<div class="container">
<div class="inner">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sed, magnam. Ut sunt nihil quo reprehenderit in voluptas voluptatum at tempore accusamus suscipit ipsam ea atque, unde, itaque quas pariatur architecto.
</div>
</div>
<p>
<span id="scroll">Scroll</span>
</p>
基本的には、ここでは、ここで何が起こっているかである。
- あなた
container
要素のwidth
がcontainerWidth
という変数に格納されます。
- これは、とともに、
width: auto
に一時的に設定されます。
- この
container
要素の新しい幅は、containerMaxWidth
として格納されます。
- 一時的なスタイルは、
TweenMax
のclearProps: 'all'
設定を使用した直後に直ちに削除されます。
tl
名前TimelineMax
は、この場合、-containerMaxWidth + containerWidth
あり、このタイムラインは、最初paused
に設定されていることがスクロールできるmaximum
位置へx: 0
から定義された動きを有する生成されます。
direction
変数は、TimelineMax
インスタンスのprogress
を更新するために間接的に使用されます。
currProgress
は、TimelineMax
インスタンスのprogress
を直接更新するために使用されます。
- この
currProgress
は、上記で決定したdirection
に基づいて計算されます。
- 最後に、
tl
インスタンスのprogress
プロパティを更新します。
これがあなたが探していたものかどうか教えてください。 Hereは上記のコード化された結果です。
これが役に立ちます。
ありがとうございます。私はこれを別の方法でやりましたが、あなたの提案で、私は別のプロジェクトで使うことができたいくつかのトリックを学びました。この回答を受け入れました。 –