iOS8 Safari -webkit-overflow-scrolling:touch;问题

时间:2014-11-04 15:21:42

标签: html ios css

因此,我们正在为一个在Safari中的iOS7上完美运行的客户端构建此Web应用程序。但是当我们在iOS8中检查应用程序时,它有一些巨大的错误。

  • 如果用户打开侧边栏并将其关闭,则<section style="overlay-y: scroll;"></section>中的内容会消失(重叠的部分)。
  • 某些按钮因任何原因停止工作。 (<a href="">Lala</a>

当我们从容器中移除-webkit-overflow-scrolling: touch;(包含所有内容的div)时,一切都像过去一样完美无瑕......

关于它可能是什么的任何想法?

4 个答案:

答案 0 :(得分:16)

我有同样的问题!到目前为止,我无法找到真正的解决方案,但有一个不太理想的解决方法:

假设#container设置了-webkit-overflow-scrolling: touch属性,这个jQuery应该可以帮助你:

$('#container').css('-webkit-overflow-scrolling','auto');

或者对于javascript(未经测试):

document.getElementById('container').style.webkitOverflowScrolling = 'auto';

这将禁用页面上流畅的轮盘式滚动。所以它并不理想,但您的页面现在应该正确滚动。

修改

进一步的研究使我们发现了一种更加黑客的解决方法,同时保持平滑的触摸滚动工作。假设你在css的某个地方-webkit-overflow-scrolling: touch,你可以切换&#34;它在你的JS中。我不确定你有什么显示/隐藏菜单,但希望你能利用它。

function toggleMenu(){
    $('#container').css('-webkit-overflow-scrolling','auto');

    //...Existing code

    setTimeout(function() {
        $('#container').css('-webkit-overflow-scrolling','touch');
    },500);
}

如果没有setTimeout,这对我没用。希望这可以帮助你或其他人。

答案 1 :(得分:0)

我在iOS8中遇到了这个问题,我所有按钮绑定到点击事件都无法正常工作。一般情况下,我们会延迟300毫秒,但在某些时候我需要按两次以上才能触发它。

所以我也发现这个解决方案适用于我的。点击添加touchend。

button.on('click touchend', function(event) {
  // this fires twice on touch devices
});

你可以看到他们在这里讨论的论坛。

JavaScript touchend versus click dilemma

我希望这有帮助。

答案 2 :(得分:0)

您的侧边栏是否可以通过CSS动画进行动画制作?

我在Cordova网络应用程序中遇到了同样的错误。经过一些实验,我发现问题是由父<div>(侧边栏)引起的,它通过css动画制作动画并具有属性animation-fill-mode: forwards;

删除此属性可解决此问题并恢复预期的-webkit-overflow-scrolling: touch行为

答案 3 :(得分:-1)

我的回答是:

public abstract class Weapon { ... }

public abstract class WeaponProxy<T> : MonoBehaviour where T : Weapon
{
    protected T weapon;

    public virtual void Update()
    {
        ...
        holdingPlayer = player.getHUD().showPickup(player, this);
        ...
    } 

public abstract class GunProxy<T> : WeaponProxy<T> where T : Gun
{

}



public abstract class Weapon
{
    private string weaponName;
    private string weaponIdentifier;
    private Player isHolding;

    public string getWeaponName () { return weaponName; }
    public Weapon(string weaponName, string weaponIdentifier)
    {
        this.weaponName = weaponName;
        this.weaponIdentifier = weaponIdentifier;
    }

    public void playerPickedUp (Player player)
    {
        this.isHolding = player;
    }

    public void playerDropped ()
    {
        this.isHolding = null;
    }
}

public class Gun : Weapon
{
  ...
}

public class HUD : MonoBehaviour
{
    private WeaponProxy weapon; //C# Needs a type. Underlined in red as error   

    public PlayerProxy showPickup<T> (PlayerProxy player, WeaponProxy<T> weapon) where T : Weapon
    {
        this.weapon = weapon;
        textPickupWeapon.text = "Hold '" + player.getPlayer().getControlScheme().getControlText(ControlScheme.CONTROLS.Interact) + "' to pick up " + weapon.getWeapon().getWeaponName();
        ...
    }
}

以前的解决方案不起作用:

$('#container').css('-webkit-overflow-scrolling','auto');