惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
K
Kaspersky official blog
L
LINUX DO - 热门话题
P
Proofpoint News Feed
P
Privacy & Cybersecurity Law Blog
Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
Cisco Talos Blog
Cisco Talos Blog
AI
AI
L
LINUX DO - 最新话题
H
Heimdal Security Blog
Hacker News: Ask HN
Hacker News: Ask HN
Webroot Blog
Webroot Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The GitHub Blog
The GitHub Blog
I
Intezer
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
S
Securelist
博客园_首页
IT之家
IT之家
Schneier on Security
Schneier on Security
博客园 - 叶小钗
罗磊的独立博客
WordPress大学
WordPress大学
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
W
WeLiveSecurity
The Register - Security
The Register - Security
D
DataBreaches.Net
S
Security @ Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
Recorded Future
Recorded Future
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tailwind CSS Blog
N
News and Events Feed by Topic
Cyberwarzone
Cyberwarzone
T
Tor Project blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com

博客园 - 浊浊然

kkfileview5 安装 css毛玻璃效果 createjs 实现图片拖动 node-sass 安装不上的问题 nodejs 搭建本地服务器 微信小程序,真机上接口调不通 mysql 去除字段中 空格 制表符等 用jeesite做后台开发,新写了个前端业务系统的权限问题 uniapp 打包app 用到地图相关 升级node最新版本18.x .Error: error:0308010C js 读取url中参数值 linux php 安装oci8 electron nativefier打包网址 electron-winstaller制作安装包 h5+ 上传图片(选择图片、拍照) phpword 导出word,文件已损坏问题 Vscode 右键 open with code 没有的情况,使用以下注册表脚本 PhpSpreadsheet导出excel apache https小程序android ssl error js获取url参数,以及中文乱码问题 微信js上传图片并 展示,iphone下预览
createjs 实现场景拖动、滚轮放大缩小
浊浊然 · 2025-09-18 · via 博客园 - 浊浊然
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>背景拖动</title>
    <script src="./createjs/createjs.min.js"></script>
    <style>
      body {
        margin: 0;
        overflow: hidden;
        background-color: #222;
      }
      canvas {
        display: block;
      }
      html,
      body,
      #gameContainer {
        position: relative;
        width: 100%;
        height: 100%;
      }
      #gameCanvas {
        width: 100%;
        height: 100%;
      }
    </style>
  </head>
  <body>
    <div id="gameContainer">
      <canvas id="gameCanvas"></canvas>
    </div>
    <script>
      function updateBackgroundPosition() {
        var viewWidth = stage.canvas.width;
        var viewHeight = stage.canvas.height;
        background.x =
          (viewWidth - background.image.width * background.scaleX) / 2;
        background.y =
          (viewHeight - background.image.height * background.scaleY) / 2;
      }
      var background;
      function createBackground(image) {
        background = new createjs.Bitmap(image);
        // background.scaleX = 0.1;
        // background.scaleY = 0.1;
        stage.addChild(background);

        // updateBackgroundPosition(); // 初始位置和缩放,只缩放这个图片,其他元素不变

        var img = new createjs.Bitmap("./1.png");
        img.scaleX = 0.1;
        img.scaleY = 0.1;
        stage.addChild(img);
      }

      var queue = new createjs.LoadQueue();
      queue.on("complete", handleComplete, this);
      queue.loadFile("./bg.png");

      function handleComplete() {
        var image = queue.getResult("./bg.png");
        createBackground(image);
      }
      window.devicePixelRatio = window.devicePixelRatio || 1; // 兼容低版本浏览器

      // 获取 canvas 元素
      var canvas = document.getElementById("gameCanvas");
      // 设置 canvas 元素的原始尺寸宽高,并设置缩放比例 window.devicePixelRatio为当前浏览器的缩放比例
      canvas.width = window.innerWidth * window.devicePixelRatio;
      canvas.height = window.innerHeight * window.devicePixelRatio;
      var stage = new createjs.Stage(canvas);

      // 初始化缩放和拖拽变量
      var scaleFactor = 1;
      // 记录上一次鼠标位置变量,用于计算拖动的偏移量
      var lastPointerX, lastPointerY;
      // 是否可拖动变量
      var dragging = false;

      function init(ratio) {
        window.devicePixelRatio = ratio;
        canvas.width = window.innerWidth * window.devicePixelRatio;
        canvas.height = window.innerHeight * window.devicePixelRatio;
        stage.update();
      }

      // 滚轮事件处理函数
      function handleWheel(event) {
        event.preventDefault(); // 阻止默认滚动行为
        var delta = event.deltaY > 0 ? -0.1 : 0.1; // 根据滚轮方向决定缩放比例变化
        scaleFactor += delta;
        scaleFactor = Math.max(0.5, Math.min(scaleFactor, 2)); // 限制缩放范围
        stage.scaleX = stage.scaleY = scaleFactor; // 应用缩放
      }
      canvas.addEventListener("wheel", handleWheel, { passive: false }); // 监听滚轮事件

      stage.on("stagemousedown", handleTouchStart);
      stage.on("stagemouseup", function (event) {
        dragging = false;
      });
      stage.on("stagemousemove", handleTouchMove); //pressmove事件也可以实现拖拽效果

      // 触摸开始事件处理函数
      function handleTouchStart(event) {
        dragging = true;
        lastPointerX = event.stageX;
        lastPointerY = event.stageY;
      }

      // 触摸移动事件处理函数
      function handleTouchMove(event) {
        if (dragging) {
          var dx = event.stageX - lastPointerX;
          var dy = event.stageY - lastPointerY;
          stage.x += dx; // 更新舞台X位置以实现拖拽效果
          stage.y += dy; // 更新舞台Y位置以实现拖拽效果
          lastPointerX = event.stageX;
          lastPointerY = event.stageY;
          // console.log(dx, dy)
          stage.update(); // 更新舞台以显示新的位置(如果位置有变化)
        }
      }

      // 触摸结束事件处理函数
      function handleTouchEnd(event) {
        dragging = false;
      }

      createjs.Ticker.framerate = 60; // 设置帧率
      createjs.Ticker.addEventListener("tick", stage); // 将舞台添加到ticker更新队列中,以实现动画效果。

      /* 
canvas.addEventListener("touchstart", handleTouchStart, false);
canvas.addEventListener("touchmove", handleTouchMove, false);
canvas.addEventListener("touchend", handleTouchEnd, false);
canvas.addEventListener("touchcancel", handleTouchCancel, false);
 
function handleTouchStart(event) {
    var touch = event.touches[0]; // 获取第一个触摸点
    console.log("Touch Start at: ", touch.pageX, touch.pageY);
}
 
function handleTouchMove(event) {
    var touch = event.touches[0]; // 获取第一个触摸点
    console.log("Touch Move at: ", touch.pageX, touch.pageY);
}
 
function handleTouchEnd(event) {
    console.log("Touch End");
}
 
function handleTouchCancel(event) {
    console.log("Touch Cancel");
}
*/
    </script>
  </body>
</html>