jQuery在悬停时滚动文本

时间:2012-07-07 11:35:48

标签: javascript jquery

我有一个“a”元素,我想在悬停时向左滚动。为此,我删除第一个字符并将其附加到字符串的末尾。

如何连续启动滚动功能?

鼠标输入元素 - >在鼠标离开元素或用户点击它之前,会触发scroll()。

HTML:

<a href="foo.htm" class="scrollthis">this text scrolls on hover</a>

jQuery的:

$(".scrollthis").hover(function(){
    scroll($(this));

});

function scroll(ele){

    var s = $(ele).text().substr(1)+$(ele).text().substr(0,1);
    $(ele).text(s);
}

3 个答案:

答案 0 :(得分:2)

使用setInterval()从mouseenter重复调用它,然后clearInterval()在mouseleave上停止它:

var intervalID;
$(".scrollthis").hover(function(){
    var $this = $(this);
    intervalID = setInterval(function() {
       scroll($this);
    }, 100);
}, function() {
    clearInterval(intervalID);
});

请注意,您不需要在$(ele)函数中使用scroll(),因为ele已经是jQuery对象:

function scroll(ele){
    var s = ele.text().substr(1)+ele.text().substr(0,1);
    ele.text(s);
}

演示:http://jsfiddle.net/hTBZn/

如果您使用scroll()方法的回调语法(或者甚至将这一行直接移到.text()代码中),您可以使.hover函数更整洁:

function scroll(ele){
    ele.text(function(i,val) { return val.substr(1) + val.substr(0,1); });
}​

演示:http://jsfiddle.net/hTBZn/1/

答案 1 :(得分:0)

以下是完整代码,您可以try it out as a jsfiddle

function scroll(ele){
    var s = $(ele).text().substr(1)+$(ele).text().substr(0,1);
    $(ele).text(s);
}

scrollInterval = null;
function startScrolling(e) {
    if (!scrollInterval) {
        scrollInterval = setInterval(function(){
            scroll(e)
        },100);
    }
}

function stopScrolling(e) {
    clearInterval(scrollInterval);
    scrollInterval = null;
}

$(".scrollthis").hover(function(){
    startScrolling($(this));
});

$(".scrollthis").mouseout(function(){
    stopScrolling($(this));
});

$(".scrollthis").mousedown(function(){
    stopScrolling($(this));
});

答案 2 :(得分:0)

<强> CSS

  div.container{
      width: 130px;
    }
    div.title-holder {
      width: 130px;
      height:20px;
      text-align:center;
      background: silver;
      overflow:hidden;
        position: relative;
    }
    div.title-holder a {  
      position: relative;  
      white-space:nowrap;  
        left: 0px;
    }
    div.image{
        background: brown;
        width: 100%;
        height: 100px;
    }​

<强> HTML

  <div class="container">
    <div class="title-holder">
        <a href="somelink.html">long text that needs to scroll, long text that needs to scroll, long text that needs to scroll</a>
    </div>
</div>​

<强> JS

    $(function(){
var scroll_text;
$('div.container').hover(
    function () {
        var $elmt = $(this);
        scroll_text = setInterval(function(){scrollText($elmt);}, 5);
    },
    function () {
        clearInterval(scroll_text);
        $(this).find('div.title-holder a').css({
            left: 0
        });
    }
);

    var scrollText = function($elmt){
        var left = $elmt.find('div.title-holder a').position().left - 1;
        left = -left > $elmt.find('div.title-holder a').width() ? $elmt.find('div.title-holder').width() : left;
        $elmt.find('div.title-holder a').css({
            left: left
        });
    };

});​