如何使用pixi.js或jQuery UI实现自由滚动?

sqougxex  于 12个月前  发布在  jQuery
关注(0)|答案(1)|浏览(202)

我试图使一个页面类似于https://pharrellwilliams.com/的自由滚动,必须能够导航到左,右,下,上,我不知道如果它是用画布做的
我可以调查的是,它占用了https://www.pixijs.com库,也占用了https://jqueryui.com/
在jquery iu的页面上是这个例子:

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <style>
  #draggable { width: 150px; height: 150px; padding: 0.5em; }
  </style>
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#draggable" ).draggable();
  } );
  </script>
</head>
<body>

<div id="draggable" class="ui-widget-content">
  <p>Drag me around</p>
</div>

字符串
有了这段代码,我可以把div移动到我想要的地方,但我想要的是移动,就像在phillill威廉姆斯的页面中一样,我有一个平等的项目,我想学习

wko9yo5t

wko9yo5t1#

这里有一个例子可能对你有帮助。它远没有你提供的例子网站那么密集。如果这对你有用,你可以把它集成到你自己的项目中。

HTML格式

<div id="main">
  <div class="part" style="background-color: rgba(255,0,0,0.25); top: 0; left:0;"></div>
  <div class="part" style="background-color: rgba(0,0,255,0.25); top: 0; left: 1500px;"></div>
  <div class="part" style="background-color: rgba(255,255,0,0.25); top: 900px; left: 0;"></div>
  <div class="part" style="background-color: rgba(0,255,0,0.25); top: 900px; left: 1500px;"></div>
</div>

字符串
基本结构,创建4个大的div部分,并专门将它们放置在HTML中。我们可以将项目放置在页面的负部分,但我们不能在任何方向上将负滚动到0,所以最好将它们从0,0放置。

CSS

body {
  margin: 0;
  padding: 0;
  overflow: hidden;
}

#main {
  position: relative;
}

.part {
  width: 1500px;
  height: 900px;
  position: absolute;
}


这有助于我们隐藏滚动条和设置其他常规样式。

JavaScript

$(function() {
  function moveToCenter() {
    var vert = $(document).height() - $(window).height();
    var horz = $(document).width() - $(window).width();
    console.log("Centering View:", Math.round(horz / 2), Math.round(vert / 2));
    window.scrollTo(Math.round(horz / 2), Math.round(vert / 2));
  }

  function calcEdges(buff) {
    var t = [0, buff];
    var b = [$(window).height() - buff, $(window).height()];
    var l = [0, buff];
    var r = [$(window).width() - buff, $(window).width()];
    return {
      top: t,
      left: l,
      right: r,
      bottom: b
    };
  }

  function move(d, n) {
    var c, g;
    if (d == "top") {
      c = $(window).scrollTop();
      g = c + n;
      if (g <= 0 || (g >= $(document).height())) {
        console.log("Hit Top/Bottom Boundry");
        return false;
      }
      $(window).scrollTop(g);
    } else {
      c = $(window).scrollLeft();
      g = c + n;
      if (g <= 0 || (g >= $(document).width())) {
        console.log("Hit Left/Right Boundry");
        return false;
      }
      $(window).scrollLeft(g)
    }
  }

  function init() {
    moveToCenter();
    var sides = calcEdges(30);
    $(window).mousemove(function(e) {
      var x = e.clientX,
        y = e.clientY;
      if (x > sides.left[0] && x < sides.left[1]) {
        console.log("Dir: Left", x);
        move("left", -5);
      } else if (x > sides.right[0] && x < sides.right[1]) {
        console.log("Dir: Right", x);
        move("left", 5);
      }
      if (y > sides.top[0] && y < sides.top[1]) {
        console.log("Dir: Top", y);
        move("top", -5);
      } else if (y > sides.bottom[0] && y < sides.bottom[1]) {
        console.log("Dir: Bottom", y);
        move("top", 5);
      }
    });
  }
  init();
});


这里有相当多的东西。这里是基本的:

  • 一个将视口移动到内容中心的功能。这样用户就有地方可以滚动到
  • 一个帮助我们计算“边缘”位置的函数,该函数基于从窗口边缘开始的特定像素数
  • 在特定方向(topleft)移动或滚动窗口特定量的功能
  • 一个初始化一切的函数,滚动到中心并设置我们的mousemove回调事件

工作示例代码:https://jsfiddle.net/Twisty/z8vh6kwx/
工作示例显示:https://jsfiddle.net/Twisty/z8vh6kwx/show
我已经配置了我的例子,当用户将鼠标从屏幕边缘移动30像素时,它会向那个方向滚动5像素。这有点笨拙,但你可以看到它确实工作。你可以有许多不同大小的部件,并浮动在页面的不同部分。你可以添加其他悬停样式和单击事件。它不必比这更复杂。

相关问题