小编aki*_*uri的帖子

轻松纺车

我正在创造一个像游戏一样的财富之轮,目前正在开车.我想为车轮添加缓和效果,使旋转变得逼真.我之前没有关于缓动的知识,所以我在JavaScript中使用了Easing简介中的代码.

的jsfiddle

var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");

var img = new Image();
img.src = "data:image/png;base64,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";

context.resetTransform();
context.translate(205, 205);
context.drawImage(img, -201,-201,402,402);

var angle = 0;
var angularVelocity = .01;

function draw() {
	// ease out
	angularVelocity	+= .0035;
	angle -= (1 / angularVelocity);
	
	context.resetTransform();
	context.clearRect(0, 0, canvas.width, canvas.height);
	context.translate(205, 205);
	context.rotate(angle * Math.PI/180);
	context.drawImage(img, -201,-201,402,402);
	
	spin = requestAnimationFrame(draw);
}

function startSpin() {
	spin = requestAnimationFrame(draw);
}
Run Code Online (Sandbox Code Playgroud)
body {
  background: gainsboro;
  margin: 0;
}
#container {
  position: …
Run Code Online (Sandbox Code Playgroud)

javascript animation canvas

7
推荐指数
1
解决办法
1200
查看次数

设置画布缩放/缩放原点

我试图在画布上创建缩放效果,我已经设法做到了,但是有一个小问题.缩放(缩放)原点位于画布的左上角.如何指定缩放/缩放原点?

我想我需要使用,translate但我不知道应该如何以及在哪里实现它.

我想用作缩放原点的是鼠标位置,但为简单起见,画布的中心可以.

的jsfiddle

var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
canvas.width = 600;
canvas.height = 400;

var global = {
  zoom: {
    origin: {
      x: null,
      y: null,
    },
    scale: 1,
  },
};

function zoomed(number) {
  return Math.floor(number * global.zoom.scale);
}

function draw() {
  context.beginPath();
  context.rect(zoomed(50), zoomed(50), zoomed(100), zoomed(100));
  context.fillStyle = 'skyblue';
  context.fill();

  context.beginPath();
  context.arc(zoomed(350), zoomed(250), zoomed(50), 0, 2 * Math.PI, false);
  context.fillStyle = 'green';
  context.fill();
}

draw();

canvas.addEventListener("wheel", trackWheel);
canvas.addEventListener("wheel", zoom);

function zoom() {
  context.setTransform(1, …
Run Code Online (Sandbox Code Playgroud)

javascript animation canvas zoom

7
推荐指数
1
解决办法
6060
查看次数

使用 MySQL Workbench 访问 Lightsail 实例的数据库

我有一个使用 bitnami 堆栈设置的 Amazon Lightsail Ubuntu 多 WordPress 站点。

在此处输入图片说明

我正在寻找一种使用 MySQL Workbench 远程访问 Amazon Lightsail 上实例数据库的方法。

请注意,我没有单独的 Lightsail 数据库,因为我目前正在尝试以尽可能便宜的方式做事。所以以下指南不适用于我。

在 Amazon Lightsail 中连接到您的 MySQL 数据库

根据wp-config.phpMySQL数据库正在使用localhost:3306

我有静态 IP 地址3.230.xxx.xxx。我从wp_config.php文件中获取了数据库用户名和密码。

我已经输入了详细信息。

在此处输入图片说明

我想知道是否有其他人设法连接到实例的数据库,而不是单独的数据库。

在此处输入图片说明

如果这是不可能的,我想知道是否有任何关于如何最好地远程访问此实例的数据库的建议。

mysql ubuntu mysql-workbench amazon-web-services amazon-lightsail

7
推荐指数
1
解决办法
4580
查看次数

网格的3d框(只有两个面)

我有一个3d框的网格,只有两个面(正面和底面).每个盒子都有自己的视角.悬停时,框旋转; 底面朝向前方.例如:

.grid {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    width: 1000px;
    margin: 50px auto;
}
.box-wrapper {
    width: 25%;
    height: 250px;
    perspective: 1000px;
}
.box {
    width: 100%;
    height: 100%;
    position: relative;
    transition: transform .5s;
    transform-style: preserve-3d;
}
.box .face {
    width: 100%;
    height: 100%;
    position: absolute;
    left: 0;
    top: 0;
    border: 1px solid black;
    display: flex;
    justify-content: center;
    align-items: center;
}
.box .face.front {
    transform: translateZ(123.5px);
    background-color: hsla(0, 100%, 50%, .5);
}
.box .face.bottom {
    transform: rotateX(-90deg) translateZ(123.5px); …
Run Code Online (Sandbox Code Playgroud)

javascript css css3 css-transforms css-animations

6
推荐指数
1
解决办法
81
查看次数

使用 currentTime 时视频滞后

我有一个简单的 HTML 页面,我在页面上播放视频。我使用滚动条作为搜索栏。换句话说,只要用户滚动,视频就会播放。

我已经在几个地方看到过这种效果,并想自己创建它。我写的脚本功能齐全,但有一个小问题:视频本身。

示例中的视频运行流畅,但我创建的视频却滞后。我似乎无法弄清楚原因。我尝试了 FPS、分辨率、比特率的不同组合,但它们没有帮助。

我能找到的视频之间的唯一区别是,当我播放示例中的视频时,我可以在 MPC (K-Lite) 上查找任何帧。我只能在我创建的视频中寻找 3-4 帧。所以问题可能与此有关。我不知道。如果是这样,我需要一种方法来使视频完全可查找。我怎么做?

https://akinuri.github.io/sticky-scrollable-video/(在线演示)
https://github.com/akinuri/sticky-scrollable-video(repo,查看详情)
https://www.audi。 com.tr/tr/web/tr/modeller/a8/a8-l.html(粘性可滚动视频)
codepen.io/ollieRogers/pen/lfeLc(可滚动视频)

在线演示播放流畅/可搜索的视频(来自奥迪)。要查看视频之间的差异,您必须从 GitHub 下载该项目。两个视频(Audi 和 Chrome_ImF.ogv)流畅/可搜索。其他两个(Chrome_icon,卧室.mp4)有问题/滞后(只有少数帧是可搜索的)。


Chrome/Opera 的播放效果比 Firefox 更流畅。我正在使用 Premiere Pro 制作视频。

编辑:虽然链接的问题谈到了同样的问题,但我不能将我的问题标记为它的重复。为什么?3岁了,只有1个答案,答案没有被接受,而且很差。视频编辑不是我的主要职业,所以我无法从答案中直接推断。应该详细地给出答案。我的问答更详细。所以我怀疑看到这两个问题的人会更喜欢旧的。

html javascript video

6
推荐指数
1
解决办法
1894
查看次数

在画布中捏合/折叠图像

如何在画布中捏/皱图像的某些区域?

前段时间我做了一个太阳系动画,我开始重写它。现在,我想为质量添加重力效果。为了使效果可见,我将背景变成了一个网格,我将对其进行修改。

想要的效果是这样的(PS制作)

在此处输入图片说明

在此处输入图片说明


context.background("rgb(120,130,145)");
context.grid(25, "rgba(255,255,255,.1)");

var sun = {
    fill        : "rgb(220,210,120)",
    radius      : 30,
    boundingBox : 30*2 + 3*2,
    position    : {
        x       : 200,
        y       : 200,
    },
};
sun.img = saveToImage(sun);

context.drawImage(sun.img, sun.position.x - sun.boundingBox/2, sun.position.y - sun.boundingBox/2);
Run Code Online (Sandbox Code Playgroud)

js小提琴


更新:我已经做了一些谷歌搜索并找到了一些资源,但由于我以前从未进行过像素操作,因此无法将它们放在一起。

在 HTML5 Canvas 中使用双线性过滤的像素失真 | Splashnology.com(仅限功能)

glfx.js(带有演示的 WebGL 库)

JSFiddle球面化、缩放、旋转示例)

我想,倒置形式的球形效果对这项工作有好处。

javascript geometry canvas distortion

5
推荐指数
1
解决办法
2407
查看次数

获取子文件夹的数量

count(glob("test/*"))用来计算文件夹中的子文件test夹,但现在我在test文件夹中也有文件,而不仅仅是文件夹,我得到的结果不正确.有没有办法修改glob模式,以便它只返回文件夹,而不是文件?

我想过一个解决方法.获取文件夹和文件的总数,仅获取文件数,然后从整数计算中减去文件数.

$total_items  = count(glob("test/*"));
$total_files  = count(glob("test/*.*"));
$folder_count = $total_items - $total_files;
Run Code Online (Sandbox Code Playgroud)

这有效,但可能有一种更简单的方法.

php glob count

5
推荐指数
1
解决办法
3272
查看次数

纯JavaScript动画缓和

我一直试图找到一个纯粹的JavaScript轻松实现几个小时,但找不到任何.接近的那些没有任何意义.我所能找到的只是一堆没有实现的缓动函数.

例如,这些函数:

function linear(time, begin, change, duration) {
    return change * time / duration + begin;
}

function easeInQuad(t) {
    return t*t
},

function easeOutQuad(t) {
    return t*(2-t)
},
Run Code Online (Sandbox Code Playgroud)

困扰我的一件事是fps在哪里发挥作用?它与持续时间直接相关.我没见过它.

如何在以下动画中实现上述缓动功能?

的jsfiddle

var box = document.getElementById("box");

var fps		= 60;
var duration	= 2; // seconds
var start	= 0; // pixel
var finish	= window.innerWidth - box.clientWidth;
var distance	= finish - start;
var increment	= distance / (duration * fps);

var position = start;

function move() {
  position …
Run Code Online (Sandbox Code Playgroud)

javascript animation easing

5
推荐指数
1
解决办法
4558
查看次数

放大轮廓/向外生长

我有一个小脚本(GitHub)(基于这个答案)来检测白色背景上的对象。该脚本工作正常并检测到对象。例如,这张图片:

原始图像

变成这样:

图像上的轮廓

然后我裁剪boundingRect(红色的)。

我将对这张图片进行进一步的操作。例如,我将只裁剪轮廓,而不是矩形裁剪。(无论如何,这些都是要面对的进一步问题。)

现在我想做的是放大/增长轮廓(绿色)。我不确定在这种情况下规模和增长是否意味着相同的事情,因为当我想到规模时,通常有一个原点/锚点。对于增长,它是相对于边缘的。我想要这样的东西(在 Photoshop 中创建):

成长的例子

因此,在检测到对象/找到轮廓后,我想按某个值/比率来增长它,以便我有一些空间/像素可以修改,这不会影响对象。我怎样才能做到这一点?

提到的脚本:

# drop an image on this script file
img_path = Path(sys.argv[1])

# open image with Pillow and convert it to RGB if the image is CMYK
img = Image.open(str(img_path))
if img.mode == "CMYK":
    img = ImageCms.profileToProfile(img, "Color Profiles\\USWebCoatedSWOP.icc", "Color Profiles\\sRGB_Color_Space_Profile.icm", outputMode="RGB")

img      = cv2.cvtColor(numpy.array(img), cv2.COLOR_RGB2BGR)
gray     = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
threshed = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY_INV)[1]
kernel   = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (11,11))
morphed  = cv2.morphologyEx(threshed, cv2.MORPH_CLOSE, kernel)
contours …
Run Code Online (Sandbox Code Playgroud)

python opencv scale contour

5
推荐指数
1
解决办法
3467
查看次数

同步解析本地json文件,无需future/async

我对 Flutter 还很陌生,我正在尝试将本地json文件解析为List对象。到目前为止,这是我的代码:

import 'dart:convert';
import 'dart:async' show Future;
import 'package:flutter/services.dart';

class ItemManager {
  List<Item> items;

  ItemManager() {
    loadItems();
  }

  void loadItems() async {
    var tempList = await getItems();
    items = tempList;
  }

  Future<List<Item>> getItems() async {
    String dataString = await loadAsset();
    var json = jsonDecode(dataString)['items'] as List;
    List<Item> parsedList = json.map((i) => Item.fromJson(i)).toList();
    return parsedList;
  }

  Future<String> loadAsset() async {
    String value = await rootBundle.loadString('assets/items.json');
    return value;
  }
}

class Item {
  String title = …
Run Code Online (Sandbox Code Playgroud)

parsing json asynchronous synchronous flutter

5
推荐指数
1
解决办法
1737
查看次数