Создание масок в браузерах - PullRequest
3 голосов
/ 25 сентября 2011

Я вижу, что есть способы сделать это в браузерах webkit, но я не вижу способов сделать это в других.Это просто функция, которая не была реализована во всех браузерах?

У меня нет стандартных изображений, поэтому клип не будет работать.Возможно, мне придется сделать все заранее, что сделает мою работу экспоненциальной, но вы имеете дело с тем, что у вас есть, верно?

Я также хотел бы иметь возможность активировать этот материал из JavaScript.: /

Спасибо, если вы можете оказать поддержку.

Ответы [ 3 ]

1 голос
/ 26 сентября 2011

Вот мои 2 цента, если вам нужны именно CSS-спрайты.

<head>
<style type="text/css"><!--
#imagemask {
    background-image: url(image.png);
    background-repeat: no-repeat;
    background-color: transparent;
    height: 40px;
    width: 40px;
}
.mask1 { background-position: top left; }
.mask2 { background-position: 0 40px; }
.mask3 { background-position: 0 80px; }/* And so on, however your image file is 'layed out' */
--></style>
<script type="text/javascript">
    function mask1(){ document.getElementById("imagemask").setAttribute("class", "mask1"); }
    function mask2(){ document.getElementById("imagemask").setAttribute("class", "mask1"); }
    function mask3(){ document.getElementById("imagemask").setAttribute("class", "mask1"); }
</script>
</head>

<body>
    <a href="#" onclick="javascript:mask1()">mask 1</a>
    <a href="#" onclick="javascript:mask2()">mask 2</a>
    <a href="#" onclick="javascript:mask3()">mask 3</a>
    <div id="imagemask" class="mask1"></div>
</body>
  1. Мы определяем div # imagemask, чтобы он содержал 1 файл изображения в качестве фона, и установили его как неПовторите все вокруг, поскольку это как бы бросает вызов точке.
  2. Мы определяем, как «перемещать» изображение внутри «маски» (div) с фиксированной шириной и высотой.
  3. КакДля справки, я добавил JavaScript, который вам нужен, чтобы переключаться между масками на лету.Я написал, что примерно через 10 секунд вы, возможно, захотите написать что-нибудь более изящное, если хотите.
  4. Добавьте ссылки с помощью onclick = events
  5. Наконец, добавьте div # imagemask к телу.

Учитывая, что я не знаю ширину или высоту вашего файла изображения или его целевую маскировку, вам придется внести некоторые существенные изменения в этот код.Но вы поняли:)

1 голос
/ 26 сентября 2011

Я просто собираюсь пропустить вариант CSS в пользу этого:

Пример рабочей маски: http://gumonshoe.net/NewCard/MaskTest.html

Я приобрел класс javascript из другого урока на сайте: http://gumonshoe.net/js/canvasMask.js

Считывает данные изображения и применяет альфа-пиксели от маски к целевому изображению:

function applyCanvasMask(image, mask, width, height, asBase64) {
    // check we have Canvas, and return the unmasked image if not
    if (!document.createElement('canvas').getContext) return image;

    var bufferCanvas = document.createElement('canvas'),
        buffer = bufferCanvas.getContext('2d'),
        outputCanvas = document.createElement('canvas'),
        output = outputCanvas.getContext('2d'),

        contents = null,
        imageData = null,
        alphaData = null;

    // set sizes to ensure all pixels are drawn to Canvas
    bufferCanvas.width = width;
    bufferCanvas.height = height * 2;
    outputCanvas.width = width;
    outputCanvas.height = height;

    // draw the base image
    buffer.drawImage(image, 0, 0);

    // draw the mask directly below
    buffer.drawImage(mask, 0, height);

    // grab the pixel data for base image
    contents = buffer.getImageData(0, 0, width, height);

    // store pixel data array seperately so we can manipulate
    imageData = contents.data;

    // store mask data
    alphaData = buffer.getImageData(0, height, width, height).data;

    // loop through alpha mask and apply alpha values to base image
    for (var i = 3, len = imageData.length; i < len; i = i + 4) {
        imageData[i] = alphaData[i];
    }

    // return the pixel data with alpha values applied
    if (asBase64) {
        output.clearRect(0, 0, width, height);
        output.putImageData(contents, 0, 0);

        return outputCanvas.toDataURL();
    }
    else {
        return contents;    
    }
}
1 голос
/ 26 сентября 2011

Просто в макушку головы - и без реальной проблемы от вас, чтобы мы могли решить - вот возможный способ выполнить то, что вы хотите ...

HTML

<div class="myImage">

    <img src="path_to_image" title="Lorem ipsum" alt="Dolar sit amet" />    

    <div class="myMask">
    </div><!-- /myMask -->

</div><!-- /myImage -->

CSS

.myImage {
    position: relative;
}

.myMask {
    position:absolute;
    top: 0;
    left: 0;
    background-color: transparent;
    background-image: url('path_to_masking_image');
}

В качестве альтернативы, используйте <img /> внутри div myMask и удалите *Свойство 1018 * из CSS.


Для того, чтобы выложить его в данный момент, вам понадобятся два изображения: само изображение во всей красе и маска.

Чтобы добиться «маскирующего эффекта», нужно, чтобы изображение маски представляло собой статический сплошной цвет, соответствующий фону контейнера, в котором он находится - то есть белый, черный и т. Д.

Kapeesh?Это будет работать во всех браузерах, что вы и просили.Свойство background-clip имеет селекторы -webkit и -moz, но не поддерживается в браузерах, таких как IE или (насколько мне известно) Opera.

...