2013-05-23 3 views
5

Я ищу способ добиться только внутреннего свечения или тени на пути raphael. К сожалению, вы можете делать только радиальные градиенты на эллипсе или круге.Рафаэль внутреннее свечение?

Одна из идей может заключаться в том, чтобы создать ряд путей, которые немного меньше и вписываются в исходный путь, а затем придать им разные цвета штрихов, но я понятия не имею, как я к этому подхожу. Некоторая функция, которая берет путь и вычитает или добавляет значения в числа, в зависимости от того, где они находятся ... Во всяком случае, если у кого-нибудь есть идеи или, возможно, другая библиотека javascript, которая делает это, это было бы здорово.

+2

Вы должны принять ответ, я думаю, что это отличное решение. – Gago

+0

@Brian Его не удивительно ни в коем случае, потому что свечение будет либо продолжать за пределами исходного пути, либо будет рассеиваться (быть более прозрачным), когда оно достигнет исходного пути. Но все в порядке, я соглашусь. – dezman

+0

@Watson, если свечение продолжается наружу, затем уменьшите масштаб или измените смещение/смещение/непрозрачность функции свечения. Вы говорите мне, что если у вас есть две одинаковые фигуры, одна меньшая и одна больше, вы не можете позиционировать меньше в больших размерах? – Brian

ответ

3

Хорошо здесь, как вы можете достичь этого. Я думаю, это довольно просто. Я знаю, что трудно вручную создать теневой путь из вашего оригинала. Но есть трюк, называемый функцией scale(). Шаги к тому, как вы можете получить внутреннюю тень или внутренний эффект свечения:

  1. Создать свой путь
  2. клонировать его на другой путь
  3. Установите шкалу() клонированного пути быть 0,9 * оригинальный
  4. Тогда скрыть клонированный путь, но применить свечение() функцию на нем

код:

var paper = Raphael("notepad", 500, 500); 

var path = paper.path("M 50 200 L 120 100 200 190 80 250z"); 
var shadow = path.clone().scale(0.9).hide(); 


shadow.glow(); 
path.attr({stroke: "darkred"}); 

Посмотрите на DEMO, это не идеально, но с незначительными изменениями, вы можете получить то, что хотите.

Также в качестве примечания:
glow() функция имеет такие атрибуты, как offsetx, offsety, opacity ... Изменение этих атрибутов даст вам нужный тень/блеск.

ОБНОВЛЕНО КОДhttp://jsfiddle.net/jUTFm/41/

+0

Спасибо! Как вы думаете, можно ли использовать первый путь как ограничивающий прямоугольник, чтобы свечение тени не распространялось за пределы исходного пути? – dezman

+0

Да, это то, что я имел в виду, говоря: «Изменение этих атрибутов даст вам вашу предпочтительную тень/свечение» – Brian

+0

Также играть с функцией scale() тоже, настроить на основе вашего пути – Brian

0

Посмотрите here. Вы можете попробовать оживить ширину пути и постепенно затемнить цвет, чтобы дать какой-то светящийся эффект.

проверка из нижней части

brain = paper.add(brain); 

    brain.attr('stroke', '#ff0'); 

    brain.transform('s 0.5, 0.5 0 0'); 

    glow = brain.glow({ 
    color: '#ff0', 
    width: 5 
    }); 

    anim = Raphael.animation({ 
    "stroke-width": 15, 
    opacity: 1 
    }, 500); 


    anim = anim.repeat(Infinity); 
    glow.animate(anim); 
+1

Но дело в том, что мне нужно только свечение на внутренней стороне пути, внешность должна оставаться незатронутой. Кроме того, я не хочу вмешиваться в ход, по крайней мере, не из исходного пути. – dezman

+0

его трудно посоветовать, не видя каких-либо визуальных эффектов, что вы подразумеваете под контуром пути, переправляете ли вы области, которая не просматривается вашей фигурой, если да, возможно, вы могли бы иметь фон прямоугольника и пытаться подсвечивать , ваш путь должен замаскировать регионы, которые находятся внизу, и полая область может сделать трюк ?? – varun

+0

другим советом может быть использование плагина тени, но добавить цвет см. Здесь https://github.com/dahoo/raphael.dropshadow.js – varun

Смежные вопросы