gpt4 book ai didi

javascript - HTML5 Canvas + JS 不适用于 IOS/Safari

转载 作者:可可西里 更新时间:2023-11-01 13:45:41 25 4
gpt4 key购买 nike

我已经实现了一个带有 javascript 粒子效果的 Canvas 元素。该效果适用于除 IOS/Safari 之外的所有浏览器。我做了一些研究,IOS/Safari 支持 HTML5/Canvas:According to Browser Support Charts for HTML5/Canvas

$(function() {
var WIDTH = window.innerWidth * .9,
HEIGHT = window.innerHeight,
MAX_PARTICLES = 100,
DRAW_INTERVAL = 60,
canvas = document.querySelector('#pixies'),
context = canvas.getContext('2d'),
gradient = null,
pixies = new Array();

function setDimensions() {
WIDTH = window.outerWidth;
HEIGHT = window.innerHeight;
canvas.width = WIDTH;
canvas.height = HEIGHT;
}

setDimensions();
window.addEventListener('resize', setDimensions);

function Circle() {
this.settings = {ttl:8000, xmax:5, ymax:2, rmax:10, rt:1, xdef:960, ydef:540, xdrift:4, ydrift: 4, random:true, blink:true};

this.reset = function() {
this.x = (this.settings.random ? WIDTH*Math.random() : this.settings.xdef);
this.y = (this.settings.random ? HEIGHT*Math.random() : this.settings.ydef);
this.r = ((this.settings.rmax-1)*Math.random()) + 1;
this.dx = (Math.random()*this.settings.xmax) * (Math.random() < .5 ? -1 : 1);
this.dy = (Math.random()*this.settings.ymax) * (Math.random() < .5 ? -1 : 1);
this.hl = (this.settings.ttl/DRAW_INTERVAL)*(this.r/this.settings.rmax);
this.rt = Math.random()*this.hl;
this.settings.rt = Math.random()+1;
this.stop = Math.random()*.2+.4;
this.settings.xdrift *= Math.random() * (Math.random() < .5 ? -1 : 1);
this.settings.ydrift *= Math.random() * (Math.random() < .5 ? -1 : 1);
}

this.fade = function() {
this.rt += this.settings.rt;
}

this.draw = function() {
if(this.settings.blink && (this.rt <= 0 || this.rt >= this.hl)) {
this.settings.rt = this.settings.rt*-1;
} else if(this.rt >= this.hl) {
this.reset();
}

var newo = 1-(this.rt/this.hl);
context.beginPath();
context.arc(this.x, this.y, this.r, 0, Math.PI*2, true);
context.closePath();

var cr = this.r*newo;
gradient = context.createRadialGradient(this.x, this.y, 0, this.x, this.y, (cr <= 0 ? 1 : cr));
gradient.addColorStop(0.0, 'rgba(255,255,255,'+newo+')');
gradient.addColorStop(this.stop, 'rgba(255,255,255,'+(newo*.6)+')');
gradient.addColorStop(1.0, 'rgba(255,255,255,0)');
context.fillStyle = gradient;
context.fill();
}

this.move = function() {
this.x += (this.rt/this.hl)*this.dx;
this.y += (this.rt/this.hl)*this.dy;
if(this.x > WIDTH || this.x < 0) this.dx *= -1;
if(this.y > HEIGHT || this.y < 0) this.dy *= -1;
}

this.getX = function() { return this.x; }
this.getY = function() { return this.y; }
}

for (var i = 0; i < MAX_PARTICLES; i++) {
pixies.push(new Circle());
pixies[i].reset();
}

function draw() {
context.clearRect(0, 0, WIDTH, HEIGHT);
for(var i = 0; i < pixies.length; i++) {
pixies[i].fade();
pixies[i].move();
pixies[i].draw();
}
}

setInterval(draw, DRAW_INTERVAL);
});
#particles {
position: absolute;
background: navy;
width: 200px;
height: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="particles">
<canvas id="pixies"></canvas>
</div>

知道为什么这在 IOS/Safari 中不起作用吗?有问题的实际站点是这个:www.pjmaskslive.com

最佳答案

问题似乎是 Canvas 元素宽度在上述 website 上设置为 0 .所以我假设问题是在开始时设置 WIDTH 变量。这可能是由于 iOS 10 的一个持续错误,如 this 中所述问题。

另一种方法可能是使用 document.body.getBoundingClientRect().width 作为 window.innerWidth 和/或 window.outerWidth< 的替代方法screen.width 也可以使用,但是,这些也可能与您以前的方法有相同的问题。

不管怎样,这似乎是一个 safari 问题,而不是你的代码!

关于javascript - HTML5 Canvas + JS 不适用于 IOS/Safari,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43988446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com