仅在悬停时一次性打乱单词。

5 浏览
0 Comments

仅在悬停时一次性打乱单词。

我正在为我的主页创建一种动画式的标题,我希望文字能悬停并随机改变其水平位置。

HTML

One 100 Twenty 2000

jQuery

(function($){
 $.fn.shuffle = function() {
    var allElems = this.get(),
        getRandom = function(max) {
            return Math.floor(Math.random() * max);
        },
        shuffled = $.map(allElems, function(){
            var random = getRandom(allElems.length),
                randEl = $(allElems[random]).clone(true)[0];
            allElems.splice(random, 1);
            return randEl;
       });
    this.each(function(i){
        $(this).replaceWith($(shuffled[i]));
    });
    return $(shuffled);
};
})(jQuery);
$("header").mouseenter(function(){
     $('span').shuffle();
});

我从css-tricks.com获得了这个随机洗牌代码,它有点古怪。当我在标题上悬停时,洗牌有点太疯狂了,当我想点击链接时,它会再次触发该函数:

jsFiddle

http://jsfiddle.net/5CMCH/1/

我想实现的是,当我鼠标进入时只改变一次,点击链接进入主页,再次鼠标进入时再次改变等等。

有什么提示吗?

0
0 Comments

原因:问题出现的原因是事件被多次触发,因为在洗牌过程中,a标签的区域发生了变化。

解决方法:可以尝试给a标签添加一些样式,例如padding。

文章内容如下:

你的javascript代码看起来没问题;

看起来事件被多次触发是因为在洗牌过程中,a标签的区域发生了变化。你可以尝试给a标签添加一些样式,比如padding:

http://jsfiddle.net/5CMCH/2/

0
0 Comments

问题的原因是希望在鼠标悬停在标题上时,只触发一次洗牌效果,但希望每次洗牌效果都不同。目前的解决方法只能在页面刷新后重新触发洗牌效果。

为了解决这个问题,可以使用jQuery的one函数,它可以只触发一次事件并且在触发后移除事件处理程序。可以将以下代码添加到页面中:

$("header").one('mouseenter', function(e){
    e.stopPropagation()
    $('span').shuffle();
});

这样,当鼠标悬停在标题上时,洗牌效果将只触发一次,并且使用e.stopPropagation()来阻止事件冒泡,以防止其他事件的干扰。

如果希望每次悬停都触发洗牌效果,并且每次效果都不同,可以尝试使用Klasman的解决方法。然而,需要注意的是,该方法可能会导致页面布局混乱的问题。

0
0 Comments

问题:当悬停在标题上时,它会变得有点疯狂。

原因:这是因为事件也会触发span元素。

解决方法:检查event.currentTarget是否是你的header元素,然后只对span进行洗牌。

0