私は、「あらゆる状況で機能する」ソリューションを探そうとはしません。
私は...するだろう:
- 変更したい特定のオプションをまとめます。
- 初期化時にこれらのオプションのどれが重要かを確認する
- これらのオプションをプログラムで (手動で) 変更する
- 実行時にのみ重要なオプション (つまり、イベントが発生したときに読み取られる) の場合、単純に myScroller.options オブジェクトを変更しようとします。
たとえば、次のオプションを設定できます。
myScroller = new iScroll( el, { x:20, y:30, onRefresh: function(){ alert(11); } } );
あなたが行う私の手順を考慮して、これら3つ(またはそれ以上..)を変更しますか?
x、y、スクロールバークラス
初期化では、 x と y が使用されていることがわかります (120 行目):
// 開始位置を設定する that.x = that.options.x; that.y = that.options.y;
つまり、これらのオプションは実行時だけでなく、初期化中に that.x と that.y を変更します (これまでのところ非常に単純なものでも)。
3.
myScroller.x = newX;
myScroller.options.x = newX;
myScroller.y = newY;
myScroller.options.y = newY;
// Also depeneds on x & y, but only do this if you actually useTransform and care about this!
/*
* obtain required variables..
*/
var appVersion = navigator.appVersion,
vendor = (/webkit/i).test(appVersion) ? 'webkit' :
(/firefox/i).test(navigator.userAgent) ? 'Moz' :
'opera' in window ? 'O' : '',
has3d = 'WebKitCSSMatrix' in window && 'm11' in new WebKitCSSMatrix(),
trnOpen = 'translate' + (has3d ? '3d(' : '('),
trnClose = has3d ? ',0)' : ')';
// Code that actually matters, and where we use above variables
if (that.options.useTransform) that.scroller.style[vendor + 'Transform'] = trnOpen + that.newX + 'px,' + that.newY + 'px' + trnClose;
else that.scroller.style.cssText += ';position:absolute;top:' + that.newY + 'px;left:' + that.newX + 'px';
4.
myScroller.options.onRefresh = function() { alert(33); }
options.onDestroy プロパティでこれらすべてのことを行うこともできます;)
更新: destroy 関数にも気付きました。スクローラーを「完全にクリア」したい場合に便利です。しかし、物理的に作成されたスクロールバーを削除するコードは見当たりませんでしたが、よくわかりません。