首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用snap的辉光效应

利用snap的辉光效应
EN

Stack Overflow用户
提问于 2015-05-05 10:16:18
回答 2查看 2.8K关注 0票数 2

我正在尝试添加一个发光效果使用snap。与raphael.js不同的是,我认为Snap在默认情况下不支持辉光。然而,有一种阴影效应。我尝试使用set间隔来应用阴影,这样它就可以模拟发光的行为。但是,它并不像计划的那样起作用。我要阴影淡入和消失,说4-5次,使它像一个发光的厕所。在这里,我调用影子,但是它仍然存在,不管将它添加到setinterval代码中。这是JS小提琴

代码语言:javascript
复制
var s = Snap("#main");
var thinkers = s.select("#lastImage");
var light = s.select("#look2");

// setinterval with counter
function setIntervalX(callback, delay, repetitions) {
    var x = 0;
    var intervalID = window.setInterval(function () {

        callback();

        if (++x === repetitions) {
            window.clearInterval(intervalID);
        }
    }, delay);
}
// function to add glow

function addShadow() {
    var f = s.filter(Snap.filter.shadow(2, 2, 10, "#ffffff"));
    light.attr({
        filter: f
    });
}
// remove glow/shadow
function removeShadow() {
    var k = s.filter(Snap.filter.shadow(0, 0, 0, "#ffffff"));
    light.attr({
        filter: k
    });
}
setTimeout(shadow, 500)

function shadow() {
    setIntervalX(addShadow, 1000, 4);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-05 14:57:35

我将展示一种稍微不同的过滤方法,我认为它应该适用于任何过滤器,因为您可以通过普通的svg标记来指定它,然后打开一些过滤器,您可以在互联网上找到这些过滤器来使用。

因此,它将允许您选择任何过滤器,任何组合,并更改该过滤器的任何属性(您可以组合它们)。

假设你发现了一些svg过滤效果,用它创建一个字符串,例如.

代码语言:javascript
复制
var myFilter = '<filter id="glow" x="-30%" y="-30%" width="160%" height="160%"><feGaussianBlur id="gauss" stdDeviation="10 10" result="glow"/><feMerge><feMergeNode in="glow"/><feMergeNode in="glow"/><feMergeNode in="glow"/></feMerge></filter>';

用Snap创建过滤器(它将是一个片段,所以我们需要将它附加到文件中).我们可以访问任何元素,如果我们已经给他们一个id,或通过css选择器与someCssselector (如下所示)。

代码语言:javascript
复制
s.append( Snap.parse(myFilter) );
var glowFilter = Snap('#glow');
var gaussian = Snap('#gauss');

var t = s.rect(100,100,100,100).attr({ stroke: 'yellow', fill: 'orange', filter: glowFilter }); 

然后我们可以创建一个带有回调的动画函数,并更改任何过滤器上的参数.

代码语言:javascript
复制
var onOff = 1;

function animGlow() {

    var start = 0; var end = 10;
    if( onOff ) { start = 10; end = 0 };
    onOff = onOff ? 0 : 1; 
    Snap.animate(start,end,function( amount ) {        
        gaussian.attr({ stdDeviation: amount + ' ' + amount });
    }, 800, mina.linear, animGlow);
}

animGlow();

效果略有不同的小提琴小提琴

希望这能给出一些想法。有更简单的方法,如果你只是想要一个快照阴影,但我只是试图突出替代路线。

票数 2
EN

Stack Overflow用户

发布于 2016-01-06 08:06:19

要亲吻辉光(不如拉斐尔辉光)并添加拖动,请尝试如下:

代码语言:javascript
复制
var s = Snap("#svgTest");

//set up a shadow for hover over images shadow(dx, dy, 'color', opacity??? 3 seems darkest)
var glow = s.filter(Snap.filter.shadow(0, 2, 'yellow', .8));

//rect1 has glow
var rect1 = s.rect(10,10,50,50).attr({ fill: 'green', filter: glow });
//rect2 only has glow on hover
var rect2 = s.rect(100,100,50,50)
    .attr({ fill: 'green' })
    .hover(function() {
        //on hover..add fn glow above
        this.attr({filter : glow});
        },
        function() { 
            //on hover out, set filter to null..delete glow
            this.attr({filter : ''});
        }
    ); //end hover

// make all  dragable
var move = function(dx,dy) {
//console.log("dx: " +dx + " dy: " + dy);
        this.attr({
                    transform: this.data('origTransform') + (this.data('origTransform') ? "T" : "t") + [dx, dy]
                });
}

var start = function() {
        this.data('origTransform', this.transform().local );
}
var stop = function() { //do nothing
}
var selectAll = s.group(rect1, rect2);
selectAll.drag(move, start, stop );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30050231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档