Html 使用SVG禁用div的滚动

Html 使用SVG禁用div的滚动,html,css,svg,d3.js,overflow,Html,Css,Svg,D3.js,Overflow,我有一个使用d3js的SVG图表。我们可以在此图表中添加一些点并移动它。当我有一个大页面,所以当我们需要滚动它时,它与鼠标一起工作。但我有一个多点触控的输入屏幕,更重要的是我开发了我的手机应用程序 带有图表和滚动条的输入与输入触摸不一起工作。例如,如果我想移动我的点,滚动的是页面,而不是移动我的点。firefox、IE和我的Windows RT应用程序上的漏洞并不完全相同 你可以看到一个小例子来测试你是否有输入触摸,我猜平板电脑和智能手机的行为将与我的带有触摸屏的PC相同。 我使用以下css来模

我有一个使用d3js的SVG图表。我们可以在此图表中添加一些点并移动它。当我有一个大页面,所以当我们需要滚动它时,它与鼠标一起工作。但我有一个多点触控的输入屏幕,更重要的是我开发了我的手机应用程序

带有图表和滚动条的输入与输入触摸不一起工作。例如,如果我想移动我的点,滚动的是页面,而不是移动我的点。firefox、IE和我的Windows RT应用程序上的漏洞并不完全相同

你可以看到一个小例子来测试你是否有输入触摸,我猜平板电脑和智能手机的行为将与我的带有触摸屏的PC相同。 我使用以下css来模拟更大的应用程序:

body {
overflow:visible;
width: 2000px;
height: 2000px;
} 
有办法做到这一点吗


我希望你能理解我的问题:)

我在手机上测试了这一点,并试图研究如何强制浏览器停止滚动,但收效甚微。好消息是,你的应用程序允许移动用户很好地放置一个新点


为了快速完成项目,您可能需要创建一组控件来获取每个现有点的id,并允许移动用户使用按钮移动所需点。如果做得好的话,这样一组控件的UI可以是最小的和直观的。您可以将UI设置为显示:无,并且仅在屏幕宽度/高度小于或等于iPad大小时显示。

我在手机上测试了这一点,并试图研究如何强制浏览器停止滚动,但收效甚微。好消息是,你的应用程序允许移动用户很好地放置一个新点


为了快速完成项目,您可能需要创建一组控件来获取每个现有点的id,并允许移动用户使用按钮移动所需点。如果做得好的话,这样一组控件的UI可以是最小的和直观的。您可以将UI设置为display:none,并且仅当屏幕宽度/高度为iPad大小或更小时才显示。

我最终找到了一个在css中使用指针事件属性的解决方案

    var C1 = document.getElementById("C1"),
      evtIn = window.navigator.msPointerEnabled ? "MSPointerDown" : "touchstart",
evtOut = window.navigator.msPointerEnabled ? "MSPointerUp" : "touchend";


C1.addEventListener(evtIn, function () {

    d3.select("#C1").style("pointer-events", "all");

    d3.select("body").style("overflow", "hidden");

}, false);

C1.addEventListener(evtOut, function () {

    d3.select("#C1").style("pointer-events", "none");

    d3.select("body").style("overflow", "auto");

}, false);

触摸开始时,我只允许图表中的指针事件禁用溢出,而触摸结束时则允许指针事件。

我最终在css中找到了具有指针事件属性的解决方案

    var C1 = document.getElementById("C1"),
      evtIn = window.navigator.msPointerEnabled ? "MSPointerDown" : "touchstart",
evtOut = window.navigator.msPointerEnabled ? "MSPointerUp" : "touchend";


C1.addEventListener(evtIn, function () {

    d3.select("#C1").style("pointer-events", "all");

    d3.select("body").style("overflow", "hidden");

}, false);

C1.addEventListener(evtOut, function () {

    d3.select("#C1").style("pointer-events", "none");

    d3.select("body").style("overflow", "auto");

}, false);

触摸开始时,我只允许图表中的指针事件禁用溢出,触摸结束时则使用另一种方式。

最好将SVG的尺寸设置为屏幕的尺寸。这只是一个示例,之后我将使用其他SVG和HTML组件,如table和其他组件。所有这些都会迫使用户滚动到页面您最好的选择是将SVG的尺寸设置为屏幕的尺寸。这只是一个示例,我将使用其他SVG和HTML组件,如table和其他组件。所有这些都将迫使用户滚动到页面谢谢你的回答,但我在我的案例中找到了更好的方法谢谢你的回答,但我在我的案例中找到了更好的方法