【问题标题】:Html5 scroll effect on images图像上的 Html5 滚动效果
【发布时间】:2013-07-22 21:36:36
【问题描述】:

我需要重现在这个网站上创建的关于团队的效果:

http://www.case-3d.com/#about

我尝试在网上查找,但找不到有关此 html5 效果的教程或网站....我想知道是否有人可以帮助我?

提前谢谢你

【问题讨论】:

  • 为什么有人会因为这个问题投票给你,这让我大吃一惊。伙计,这个网站上有一些白痴 - 这是一个合理的问题,它可以帮助我了解该网站的运作方式。

标签: html scroll mask effect


【解决方案1】:

如果您检查元素,您会发现他们使用a canvas。进一步看,您可以看到使用画布的脚本(通过在检查器中搜索 ID 或一些类似的技术)称为“1”。我提取了一些基本结构,以便您可以遵循它:

//This part sets up the canvas and gets the pictures
function setupCanvas() {
  // Get canvas and context references
  teamCanvas = document.getElementById("stage1");
  teamContext = teamCanvas.getContext("2d");
  // Get images references
  img1 = document.getElementById("01");
  img2 = document.getElementById("02");
  ...

   // This part sets the initial position of the shapes
   // You can see that it is based of the window size and in reference to each other
   // Shape #1
   x1_1 = teamCanvas.width / 2;
   x1_2 = teamCanvas.width;
   x1_3 = teamCanvas.width;
   x1_4 = 0;
   x1_5 = 0;
   y1_1 = ssp1_1 = 929 + diff;
   y1_2 = ssp1_2 = 2000 + diff;
   y1_3 = ssp1_3 = 4000;
   y1_4 = ssp1_4 = 4000;
   y1_5 = ssp1_5 = 2000 + diff;
   // Shape #2
   x2_1 = 0;
   x2_2 = teamCanvas.width / 2;
   x2_3 = teamCanvas.width;
   x2_4 = teamCanvas.width;
   x2_5 = 0;
   y2_1 = ssp2_1 = 3000;
   y2_2 = ssp2_2 = 4000;
   y2_3 = ssp2_3 = 3000;
   y2_4 = ssp2_4 = 6000;
   y2_5 = ssp2_5 = 6000;
   ...
   // Some other stuff goes here, I didn't copy all of it       
 }

 // Then it goes into this function to handle the scroll and redraw it on the canvas
 function redrawAbout(scrollPosition) {
   // Refresh canvas
   teamContext.clearRect(0, 0, teamCanvas.width, teamCanvas.height);
   var scrollAmt = scrollPosition / maskModifier;
   // Redraw
   // Mask #1
   if (scrollPosition > -4000) {
     teamContext.save();
     teamContext.beginPath();
     teamContext.moveTo(x1_1, ssp1_1 + scrollAmt);
     teamContext.lineTo(x1_2, ssp1_2 + scrollAmt);
     teamContext.lineTo(x1_3, ssp1_3 + scrollAmt);
     teamContext.lineTo(x1_4, ssp1_4 + scrollAmt);
     teamContext.lineTo(x1_5, ssp1_5 + scrollAmt);
     teamContext.lineTo(x1_1, ssp1_1 + scrollAmt);
     teamContext.clip();
     teamContext.drawImage(img1, 0, -200);
     teamContext.restore();
   }
   // Mask #2
   if (scrollPosition <= -2100 && scrollPosition > -5900) {
     teamContext.save();
     teamContext.beginPath();
     teamContext.moveTo(x2_1, ssp2_1 + scrollAmt);
     teamContext.lineTo(x2_2, ssp2_2 + scrollAmt);
     teamContext.lineTo(x2_3, ssp2_3 + scrollAmt);
     teamContext.lineTo(x2_4, ssp2_4 + scrollAmt);
     teamContext.lineTo(x2_5, ssp2_5 + scrollAmt);
     teamContext.lineTo(x2_1, ssp2_1 + scrollAmt);
     teamContext.clip();
     teamContext.drawImage(img2, 0, -200);
     teamContext.restore();
   }

本质上,他们根据 x 和 y 坐标创建一些几何形状,根据这些变量切割图像以适应其各自的几何区域,计算滚动量(我相信通过另一个插件),并根据用户滚动的距离重绘所有内容。

检查元素是一个非常有用的工具,学习使用它

在 StackOverflow 上提问时,请远离此类泛型。尝试自己解决它并发布您迄今为止尝试过的内容以及给您带来麻烦的内容。给出细节并表达清楚。如果你这样做,你就不会被否决,你会得到相关的,所有的好答案

【讨论】:

  • 非常感谢您的帮助 Zeaklous 我尝试使用 javascript 代码 case-3d.com 但它会为我生成任何数据:image/png;base64... 画布和图像仍然非常现在......如果你需要这里是我测试的网址dev.av-prod.com/creanet3d-about
  • 当然是 Zeaklous,这仅适用于我并了解其工作原理。我是一个初学者,我只是认为 html5 恢复他们的脚本以更好地理解它是如何工作的......这也是为什么我被问到你是否有教程......我不是小偷,更不用说吃力不讨好但有没有其他来源可以进行实验,似乎更适合使用这个作为基础....
  • 他们(以及大多数商业网站)构建网站的方式,您无法复制/粘贴代码并使其正常工作。您必须使用他们使用的技术并向其中添加您自己的内容。根据需要复制部分(就像我在答案中发布的部分 - 它们是您想要的部分)
  • 好的,我只改变了不使用我需要的那部分脚本的方法
  • 感谢@Zeaklous - 对您的答案采取平衡的方法是 StackOverflow 上的一个令人耳目一新的变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 2017-04-07
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多