2010-06-01 10 views
12

Bir iphone webapp yapıyorum ve giriş alanı olan bir sayfam var. Göründüğü zaman, alanın sanal klavyenin üzerine çıkmasını istiyorum. Giriş odağı olayına bir scrollTo (x, y) koymayı denedim (yani klavyenin gösterilmesinden hemen önce), ancak yazmaya başladığımda sayfa tekrar yukarı doğru kayar (muhtemelen varsayılan mobil safari davranışını temel alır). Ayrıca, tuşa basma olay işleyicileri ayarlamayı denedim, ancak bu olayların yayılmasını engellemek, kaydırma işlemini engellemesine rağmen, yalnızca klavyeyi devre dışı bıraktı.iphone safari sanal klavyede yazarken seçilen öğeye kaydırma

Sanal klavye göründüğünde sayfanın belirli bir konumda olmasını (giriş alanının giriş klavyesiyle) zorlamak için herhangi bir yolu var mı ve yazmaya devam ettiğinde hareket etmemesi gerekiyor mu?

+0

Bu sorunun bir çözümü olduğunu düşünmüyorum, iphone'daki metinlerdeki sorunlara benziyor - metin alanı çok daha kötü olsa da, içeriği düzenlemeyi bitirdikten sonra yakınlaştırma oranınızı değiştirecek (Bu, uygulamayı kapatmadan tercih edilen yakınlaştırma ayarına geri dönemezsiniz çünkü bir web uygulaması gibi davranmasını istediğiniz için yakınlaştırma özelliğini devre dışı bırakırsanız gerçekten berbat.). –

+1

@ Yukarıdaki yorumu kabul ettiğimden emin değilim.Bir web uygulaması oluşturuyorsanız, mobil web siteleri de dahil olmak üzere farklı web tarayıcılarındaki farklı davranışları dikkate almanız gerekir - ancak genel olarak, burada mobil safaride açıklanan şekilde formlarla ilgili sorun yaşamadım. @spinlock, özellikle mobil tarayıcı için bir webapp tasarlıyor veya değil mi? Hangi SDK kullanıyorsunuz? Dashcode veya başka? Konteyner DIV'unuzun kaydırılmasına izin veriyor musunuz? Sayfanız ekrana sığmıyor, ancak kaydırmıyor mu? Bu cevaplardan bazıları probleminizi çözmemize yardımcı olabilir. – T9b

+0

Hey @spinlock yazarken girdiyi tek bir yere sabitlemeyi başardınız mı? Şimdiden teşekkürler – scanales

cevap

3

Tamam, muhtemelen bu muhtemelen göreceğiniz en kötü hack, ama hiçbir şey yenmez.

Yapabilecekleriniz, metin kutusunun konumunu, dinamik olarak (javascript kullanarak) sabit, position:fixed olarak değiştirmektir; bu, metin kutusunun sayfa yerine tarayıcı penceresine göre konumunu değiştirecektir. Bu, Iphone'un kaymasını alakasız hale getirmeli ve ne olursa olsun metin kutusunun sayfanın en üstünde olması gerekir. Daha sonra onBlur, css pozisyonu tekrar göreceli olarak ayarlanır (bunun yerine tekrar yerine koyması gerekir).

Bunu daha da güzelleştirmek için metin kutusunun arkasına bir boşluk koyabilirsiniz. Böylece, gerçek site içeriğini gizler ve üst ve sol css özelliklerini kullanarak metin kutusunu ortalayabilirsiniz (yalnızca onBlur'u temizlediğinizden emin olun).

0

Bkz yerine scrollTo (x, y) 'nin css translate3d kullanmaya çalışın zaman klavye başlattı olduğunu Tarayıcı, pencereyi öğenin kendisine bakmaya çalışmaktadır.

Olup olmadıysa, klavye çıkmadan önce kaydırma çubuğu konumunun kaydedilmesidir. Tarayıcı daha sonra pencerenin görüntüye getirmek için hareket etmesi gereken mesafeyi hesaplar, klavyeden sonra kaydedilen değere göre açılır. Pencerenin konumunu hangi saatte değiştirdiniz. Yani pencereyi, düşündüğünüz konumun aksine ayarladığınız konuma göre hareket ettiriyor.

Öğeyi el ile görüntülemeye (komut dosyası yok) kaydırmaya çalışmadığınızda, davranışınız nedir?

iPhone tarayıcısının, istediğiniz gibi yapacağı izlenim altındayım. Aksi takdirde, eleman konumlandırması ile ilgili bir şey olabilir. I.E. Tarayıcı, öğenin konumunu doğru bir şekilde hesaplayamaz, örn. Sabit bir konum kapsayıcısındaysa (tarayıcı, tarayıcının onu izlemeye çalıştığı anda yerini taşıyacaktır).

Bu başarısız olursa, scrollTo işlevini zaman aşımına sokmayı deneyebilirsiniz, böylece klavye çıktıktan sonra patlar.