我有下面的脚本,需要一个图像,并绘制一个基于图像背景颜色的画布(该图像使用PHP从数据库加载),我要求它是它在移动Safari浏览器上工作,但不在Chrome上:画布不画在手机铬,但会画在Safari上
在某些分辨率下,画布将从波形回退到正方形,并且每当窗口宽度发生变化(移动设备旋转时增加此宽度)时也调整大小。
我必须注意,这个脚本适用于页面上的移动设备上,我没有从图像中获取颜色,并且我静态设置该颜色,导致我认为这是由于图像尚未加载。
<script>
function drawCatWave() {
window.onload = function() {
var catImg = new Image();
catImg.src = "/product_images/<?php echo $row_category['logo_colour']; ?>";
var context;
context = document.getElementById('cat-image').getContext('2d');
context.drawImage(catImg, 20, 20, 130, 100);
pixData = (context.getImageData(20, 20, 1, 1).data);
rgb1 = pixData[0].toString();
rgb2 = pixData[1].toString();
rgb3 = pixData[2].toString();
rgb4 = pixData[3].toString();
var rgbString = rgb1 + "," + rgb2 + "," + rgb3 + "," + rgb4;
var rgb = "rgba(" + rgbString + ")";
$('.cat-prod-box h2').css("color", rgb);
console.log(rgb1, rgb2, rgb3);
canvas = document.getElementById("canvas");
var parent = document.getElementById("cat-banner-wave");
ctx = canvas.getContext("2d")
canvas.width = parent.offsetWidth;
canvas.height = parent.offsetHeight;
var actWidth = canvas.width;
var actHeight = canvas.height;
canvas.height = 380;
ctx.lineWidth = 6;
ctx.strokeStyle = "rgba(" + rgbString + ")";
ctx.beginPath();
ctx.moveTo(0, 70);
ctx.bezierCurveTo((actWidth/2), -200, (actWidth/3), 445, actWidth, 100);
ctx.bezierCurveTo(actWidth, 333, actWidth, 333, actWidth, 333);
ctx.bezierCurveTo(0, 333, 0, 333, 0, 333);
ctx.closePath();
ctx.fillStyle = rgb;
ctx.fill();
ctx.stroke();
};
}
function drawCatSquare() {
window.onload = function() {
var catImg = new Image();
catImg.src = "/product_images/<?php echo $row_category['logo_colour']; ?>";
var context;
context = document.getElementById('cat-image').getContext('2d');
context.drawImage(catImg, 20, 20, 130, 100);
pixData = (context.getImageData(20, 20, 1, 1).data);
rgb1 = pixData[0].toString();
rgb2 = pixData[1].toString();
rgb3 = pixData[2].toString();
rgb4 = pixData[3].toString();
var rgbString = rgb1 + "," + rgb2 + "," + rgb3 + "," + rgb4;
var rgb = "rgba(" + rgbString + ")";
$('.cat-prod-box h2').css("color", rgb);
console.log(rgb1, rgb2, rgb3);
canvas = document.getElementById("canvas");
var parent = document.getElementById("cat-banner-wave");
ctx = canvas.getContext("2d")
canvas.width = parent.offsetWidth;
canvas.height = parent.offsetHeight;
var actWidth = canvas.width;
var actHeight = canvas.height;
canvas.height = 380;
ctx.lineWidth = 6;
ctx.strokeStyle = "rgba(" + rgbString + ")";
ctx.rect(0, 0, actWidth, actHeight);
ctx.fillStyle = rgb;
ctx.fill();
ctx.stroke();
};
}
$(document).ready(function() {
if($(this).width() > 500){
drawCatWave();
}else{
drawCatSquare();
}
});
$(window).resize(function() {
if ($(this).width() > 500) {
drawCatWave();
} else {
drawCatSquare();
}
});
</script>
即与画布不拉丝,由于没有被加载尚未 – GameAlchemist
嗯形象的问题,我认为window.load是确保画布不画,直到整个窗口就装,不移动铬不同的方式处理这个因为某些原因? – dyatesupnorth
是窗口被装上window.load。然后,脚本执行,并要求用的.src分配图像负载。所以结果将取决于缓存在浏览器上的处理方式。 (并试试!) – GameAlchemist