Pergunta sobre mobile-safari, objective-c, javascript, cordova, ios – Desativar o efeito de rejeição vertical em um aplicativo da web do ipad

4

Existe uma maneira de desativar o efeito de rejeição em uma div de rolagem?

Até agora eu tentei essas coisas, mas nenhuma funcionou. Por favor ajude!

Como desativar o retorno / rolagem vertical no iPhone em um aplicativo da web móvel

Não é possível desativar a rejeição com UIScrollView e pagingEnabled = YES

ipad safari: desativa a rolagem e o efeito de rejeição?

Desativar saltos verticais do UITableView ao rolar

E

http://www.iphonedevsdk.com/forum/iphone-sdk-development/996-turn-off-scrolling-bounces-uiwebview.html

Obrigado!

O link que eu postei também parece ter uma solução PhoneGap. Você pode querer tentar. woz
Não, não houve erros. imhere
Você recebe algum erro no Console de erros para qualquer uma das soluções? woz
Eu coloquei este aplicativo da web no XCode usando o PhoneGap. Também tentei myScrollView.bounces = NO; E [(UIScrollView *) [webview.subviews objectAtIndex: 0] setAllowsRubberBanding: NÃO]; Aqui eu preciso do div para rolar mas não saltar. Não tenho certeza se é possível. imhere

Sua resposta

5   a resposta
1

o código que você está usando é a rolagem de desativação. Se você quiser rolar, mas sem o efeito de rejeição, tente algo assim:

var xStart, yStart = 0;

document.getElementById("scrollableDiv").addEventListener('touchstart',function(e) {
    xStart = e.touches[0].screenX;
    yStart = e.touches[0].screenY;
});

document.getElementById("scrollableDiv").addEventListener('touchmove',function(e) {
    var xMovement = Math.abs(e.touches[0].screenX - xStart);
    var yMovement = Math.abs(e.touches[0].screenY - yStart);
    if((yMovement * 3) > xMovement) {
        e.preventDefault();
    }
});

Eu encontrei esta soluçãoAqui. Deixe-me saber se funciona para você.

Ainda não funcionou. imhere
Obrigado, mas isso desativa, bem como a rolagem. imhere
Acabei de editar o código. Eu deveria ter usadodocument.getElementById("scrollableDiv").addEventListener(... ao invés dedocument.addEventListener(... em ambos os lugares. Isso pode ser porque não funcionou. woz
3

Abra o seu projeto phoneGapconfig.xml arquivar e alterar UIWebViewBounce do padrão true para false:

    <preference name="UIWebViewBounce" value="false" />

Não imagino porque o padrão é verdadeiro ...

O último comentário de obras russas perfeito para mim em cordova 3.3 Minha vida foi salva. THX. JSG33kC0d3
Eu acredito que a nova preferência se você tem uma versão posterior do phonegap / cordova é <nome da preferência = "DisallowOverscroll" value = "true" /> Pelo menos foi o que funcionou para mim com o cordova 2.7.0 russter
0

Aqui está o que eu fiz -

#scrollableDiv {
    position:fixed;
    top:50px;
    width:300px;
    height:500px;
    word-wrap: break-word;
    overflow-y: scroll; 
}

document.getElementById("scrollableDiv").innerHTML = longText;
document.getElementById("scrollableDiv").scrollTop = 0;
Para evitar saltos horizontais, verifique se o conteúdo não está sobrecarregado. imhere
6

Cordova.plist arquivo e definir a chaveUIWebViewBounce paraNÃO.

Felizmente esse cara encontrou uma solução melhor, obrigado! Likwid_T
Obrigado pela sua contribuição, mas eu já encontrei uma solução. imhere
1

ja que ainda tenha rolagem.

O que está acontecendo é que todos os movimentos de toque estão desativados por padrão. Se o elemento que você deseja rolar tem a classe .scroll, ele define o gate como true para permitir que ele passe.

No final do toque, você redefiniu o gate para false.

Isso funciona no IOS5 e 6 e pode funcionar no Chrome e no Safari

Look @ este post para estendê-lo
Como evitar a rolagem de páginas ao rolar um elemento DIV?

O único problema é que, se você rolar pelo elemento rolável, o efeito elástico permitirá que o pergaminho seja passado para cima da árvore enquanto a rolagem estiver definida como verdadeira. Definir manualmente a posição de rolagem é substituída pelo efeito de salto temido.
Aposto que os monstruosos da Apple têm uma implementação nativa de rolagem rodando em um tempo limite definido com cada etapa conectada.

Então, se você rolar para -20, acho que é difícil conectar cada etapa a um loop sem verificar onde estava. Rolando para -20 -19 -18 etc em seqüência.

Devemos pensar em uma maneira de contornar isso! (na verdade, digitando a carga, eu tenho uma ideia!)

$(function(){
  var scroll = false
  var scroll_element;
  $('body').on('touchmove',function(e){
      if(!scroll){
      e.preventDefault()
      }
  })
  $('body').on('touchend',function(e){
      scroll = false
  })  
  $('.scroll').on('touchstart',function(e){
      scroll_element = this
      scroll = true
  })  
})

Perguntas relacionadas