2011-07-20 10 views
2

Mobile Safari用のJavascriptを使用してスクロールイベントをシミュレートしようとしています。 私はなど、次のコードJavaScriptを使用してスクロールイベントをシミュレートする

var evt = document.createEvent("MouseEvents");  
evt.initMouseEvent("scroll", true, true, window,0, 0, 0, 0, 0, false, false, false, false, 0, null); 

上記のコードは基本的にtouchstart、touchmove、マウスオーバー、マウスダウンなどのマウスイベントにtouchendのようなタッチイベントをマップするjQueryプラグインjQuery.UI.Ipadの一部であり、

を使用しています

何らかの理由でスクロールイベントをシミュレートするコードが機能していません...どうかお手伝いください。だから本質的に私の質問は、私はスクロールイベントをシミュレートする方法です。 ありがとうございます。

答えて

0

なぜスクロールコントロールを上書きするのか混乱していると思います。なぜあなたはマウスイベントを真似したいのか分かりますが、スクロールしてはいけないかもしれません。

var top = document.body.scrollTop; 

として設定します:

document.body.scrollLeft = sX; 
document.body.scrollTop = sY; 
+0

これはおそらく? window.document.body.onscroll = doSomething; – MrHayman

+0

か? window.scrollTo(0、1); – MrHayman

2

だから、私は」あまりにもそれをシミュレートする必要があります知っている通常のスクロール用

はあなただけでスクロールを得ることができます変更します。私にとっては、あなたが必要とするオーバーフローボックスを備えたライトボックスを持っているときです。私が考えることができる多くの1つだけのケース。答えを探しています。ちょうど私がどこにいるのか分かっていると思っていましたが、あなたはjQuery.Uiではありません.Ipad私はGoogleにそれを求めます。

var inTouch=false; 
    var timers_arr = new Array(); 
    var c=0; 
    var t; 
    var timer_is_on=0; 
    //------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    // jeremy's timer functions 
    //------------------------------------------------------------------------------------------------------------------------------------------------------------- 
     function clearCount(timer){ 
       /// clear the time from timer 
       clearTimeout(timers_arr[timer]); 
       /// Make sure it's clear 
       timers_arr[''+timer+'']=0; 
       delete timers_arr[''+timer+'']; 

     } 
     function setCount(timer,time,func){ 
       clearCount(timer); 
       if(timers_arr[timer]==0||typeof(timers_arr[timer]) === 'undefined'){ 
        timers_arr[timer]=setTimeout(function(){ 
             func();             
         },time); 
       } 
     } 

    function updatePos(evt,startY){ 
     setCount('touchmove',1,function(){ 
      var orig = evt.originalEvent; 
      var curY = orig.changedTouches[0].pageY; 
      var y = curY - startY; 
      var sliderVal = $("#slider-vertical").slider("value"); 
      sliderVal += (y*.008); 
      $("#slider-vertical").slider("value", sliderVal); 
      updatePos(evt,startY); 
     }); 
     setCount('touchmove_anitMotion',200,function(){ 
      clearCount('touchmove'); 
      clearCount('touchmove_anitMotion'); 
     }); 
    } 
    var startX=0; 
    var startY=0; 
    var x=0; 
    var y=0; 
    var direction=''; 
    $('body').bind("onorientationchange", updateOrientation, false); 
    $('#scroll-pane').live("touchstart", function(evt){ 
     inTouch=true; 
     startX = event.targetTouches[0].pageX; 
     startY = event.targetTouches[0].pageY; 
    }); 
    $('#scroll-pane').live("touchmove", function(evt){ 
     evt.stopPropagation(); 
     evt.preventDefault(); 
     updatePos(evt,startY); 
    }); 
    $('#scroll-pane').live("touchend", function(evt){ 
     startX=0; 
     startY=0; 
     clearCount('touchmove'); 
     inTouch=false; 
    }); 
    $('#scroll-pane').live("touchcancel", function(evt){ 
     startX=0; 
     startY=0; 
     clearCount('touchmove'); 
     inTouch=false; 
    }); 

また、完璧ではなく、それを修正しようとしています。しかし、それは少なくとも働いています。さて、これはいくつかのアイデアを拍車希望

http://jqueryui.com/demos/slider/#side-scroll

に示すように、スクロールバーのためのjQuery UIのスライダーを使用しているDIV(鉱山であなたをそれは垂直だ)で、注意してください。私が超安定した答えを得るなら、私は戻ってきます。 乾杯-Jeremy

1

私は私がスクロールイベントに詳細については

function dispatchScroll(target,newScrollTop) { 
     target.scrollTop = newScrollTop; 
     var e = document.createEvent("UIEvents"); 
     // creates a scroll event that bubbles, can be cancelled, 
     // and with its view and detail property initialized to window and 1, 
     // respectively 
     e.initUIEvent("scroll", true, true, window, 1); 
     target.dispatchEvent(e); 
    } 

をシミュレートする必要のあるユニットテストを書くために、これを必要と:私のために働いたhttps://developer.mozilla.org/en-US/docs/Web/API/event.initUIEvent

1

イベントはmousewheelました、第5パラメータはスクロールダウンには正、スクロールアップには負である必要があります。

var evt = document.createEvent("MouseEvents");  
evt.initMouseEvent("mousewheel", true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null); 

FireFoxのイベントタイプはDOMMouseScrollです。

関連する問題