<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Canvas on 办公AI智能小助手</title>
    <link>https://blog.qife122.com/tags/canvas/</link>
    <description>Recent content in Canvas on 办公AI智能小助手</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <copyright>qife</copyright>
    <lastBuildDate>Wed, 31 Dec 2025 09:56:08 +0800</lastBuildDate>
    <atom:link href="https://blog.qife122.com/tags/canvas/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>使用Laravel、Prism和HTML Canvas构建AI绘画猜谜游戏</title>
      <link>https://blog.qife122.com/p/%E4%BD%BF%E7%94%A8laravelprism%E5%92%8Chtml-canvas%E6%9E%84%E5%BB%BAai%E7%BB%98%E7%94%BB%E7%8C%9C%E8%B0%9C%E6%B8%B8%E6%88%8F/</link>
      <pubDate>Wed, 31 Dec 2025 09:56:08 +0800</pubDate>
      <guid>https://blog.qife122.com/p/%E4%BD%BF%E7%94%A8laravelprism%E5%92%8Chtml-canvas%E6%9E%84%E5%BB%BAai%E7%BB%98%E7%94%BB%E7%8C%9C%E8%B0%9C%E6%B8%B8%E6%88%8F/</guid>
      <description>&lt;h1 id=&#34;构建ai驱动的绘画猜谜游戏laravelprism与html-canvas实战指南&#34;&gt;构建AI驱动的绘画猜谜游戏：Laravel、Prism与HTML Canvas实战指南&lt;/h1&gt;&#xA;&lt;p&gt;本文将引导您逐步构建一个创新的AI绘画猜谜游戏。在这个应用程序中，用户可以自由绘制任何他们喜欢的图案，而人工智能系统将尝试识别这些图案所代表的内容。&lt;/p&gt;</description>
    </item>
    <item>
      <title>构建响应式背景渐变的3D无限轮播技术</title>
      <link>https://blog.qife122.com/p/%E6%9E%84%E5%BB%BA%E5%93%8D%E5%BA%94%E5%BC%8F%E8%83%8C%E6%99%AF%E6%B8%90%E5%8F%98%E7%9A%843d%E6%97%A0%E9%99%90%E8%BD%AE%E6%92%AD%E6%8A%80%E6%9C%AF/</link>
      <pubDate>Thu, 20 Nov 2025 00:28:56 +0800</pubDate>
      <guid>https://blog.qife122.com/p/%E6%9E%84%E5%BB%BA%E5%93%8D%E5%BA%94%E5%BC%8F%E8%83%8C%E6%99%AF%E6%B8%90%E5%8F%98%E7%9A%843d%E6%97%A0%E9%99%90%E8%BD%AE%E6%92%AD%E6%8A%80%E6%9C%AF/</guid>
      <description>&lt;h1 id=&#34;构建3d无限轮播与响应式背景渐变&#34;&gt;构建3D无限轮播与响应式背景渐变&lt;/h1&gt;&#xA;&lt;p&gt;在本教程中，您将学习如何构建一个优雅的无限循环卡片滑块，使其感觉流畅、响应迅速且视觉连贯。关键理念是从活动图像中提取柔和、渐变的背景，并将其绘制到&lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;上，从而在内容和背景之间创建无缝过渡。&lt;/p&gt;</description>
    </item>
    <item>
      <title>构建响应式背景渐变的3D无限轮播技术</title>
      <link>https://blog.qife122.com/p/%E6%9E%84%E5%BB%BA%E5%93%8D%E5%BA%94%E5%BC%8F%E8%83%8C%E6%99%AF%E6%B8%90%E5%8F%98%E7%9A%843d%E6%97%A0%E9%99%90%E8%BD%AE%E6%92%AD%E6%8A%80%E6%9C%AF/</link>
      <pubDate>Wed, 12 Nov 2025 06:37:14 +0800</pubDate>
      <guid>https://blog.qife122.com/p/%E6%9E%84%E5%BB%BA%E5%93%8D%E5%BA%94%E5%BC%8F%E8%83%8C%E6%99%AF%E6%B8%90%E5%8F%98%E7%9A%843d%E6%97%A0%E9%99%90%E8%BD%AE%E6%92%AD%E6%8A%80%E6%9C%AF/</guid>
      <description>&lt;h1 id=&#34;构建3d无限轮播与响应式背景渐变&#34;&gt;构建3D无限轮播与响应式背景渐变&lt;/h1&gt;&#xA;&lt;p&gt;学习如何构建一个流畅的无限3D轮播，其中每个图像驱动基于Canvas的响应式背景渐变，自适应其颜色。&lt;/p&gt;&#xA;&lt;h2 id=&#34;概念与架构&#34;&gt;概念与架构&lt;/h2&gt;&#xA;&lt;p&gt;在深入代码之前，让我们了解实现此效果的结构。轮播建立在两个协调的层上，共同创造深度、运动和色彩和谐。&lt;/p&gt;</description>
    </item>
    <item>
      <title>从HTML5视频到帧序列：OPTIKKA平滑滚动同步动画实现指南</title>
      <link>https://blog.qife122.com/p/%E4%BB%8Ehtml5%E8%A7%86%E9%A2%91%E5%88%B0%E5%B8%A7%E5%BA%8F%E5%88%97optikka%E5%B9%B3%E6%BB%91%E6%BB%9A%E5%8A%A8%E5%90%8C%E6%AD%A5%E5%8A%A8%E7%94%BB%E5%AE%9E%E7%8E%B0%E6%8C%87%E5%8D%97/</link>
      <pubDate>Sun, 26 Oct 2025 12:11:01 +0800</pubDate>
      <guid>https://blog.qife122.com/p/%E4%BB%8Ehtml5%E8%A7%86%E9%A2%91%E5%88%B0%E5%B8%A7%E5%BA%8F%E5%88%97optikka%E5%B9%B3%E6%BB%91%E6%BB%9A%E5%8A%A8%E5%90%8C%E6%AD%A5%E5%8A%A8%E7%94%BB%E5%AE%9E%E7%8E%B0%E6%8C%87%E5%8D%97/</guid>
      <description>&lt;h1 id=&#34;创建optikka的平滑滚动同步动画从html5视频到帧序列&#34;&gt;创建OPTIKKA的平滑滚动同步动画：从HTML5视频到帧序列&lt;/h1&gt;&#xA;&lt;h2 id=&#34;初始方案html5视频&#34;&gt;初始方案：HTML5视频&lt;/h2&gt;&#xA;&lt;h3 id=&#34;为何看似可行&#34;&gt;为何看似可行&lt;/h3&gt;&#xA;&lt;p&gt;我们最初的想法是使用HTML5视频进行滚动触发动画，配合GSAP的ScrollTrigger插件进行滚动跟踪。这种方法有明显优势：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 使用视频元素的初始方法&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;VideoScene&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Section&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kr&#34;&gt;private&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;video&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;HTMLVideoElement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kr&#34;&gt;private&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;scrollTrigger&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ScrollTrigger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;setupVideoScroll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;scrollTrigger&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ScrollTrigger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;trigger&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;.video-container&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;top top&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;bottom bottom&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;scrub&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;onUpdate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 将视频时间与滚动进度同步&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;duration&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;video&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;duration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;video&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;currentTime&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;progress&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;duration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;优势：&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>JavaScript Canvas动画入门指南</title>
      <link>https://blog.qife122.com/p/javascript-canvas%E5%8A%A8%E7%94%BB%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/</link>
      <pubDate>Wed, 01 Oct 2025 01:34:06 +0800</pubDate>
      <guid>https://blog.qife122.com/p/javascript-canvas%E5%8A%A8%E7%94%BB%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/</guid>
      <description>&lt;h1 id=&#34;如何开始使用javascript-canvas动画&#34;&gt;如何开始使用JavaScript Canvas动画&lt;/h1&gt;&#xA;&lt;p&gt;或者说我的游戏开发梦想是如何从动画一个方块开始的&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;我热爱玩游戏，也热爱编程。有一天我开始思考，为什么不利用编程技能来制作游戏呢？但这听起来很难。一个人该如何开始？&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
