1

我有一个“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);
}
4

3 回答 3

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/

于 2012-07-07T11:45:20.400 回答
0

这是完整的代码,你可以试试 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));
});

​</p>

于 2012-07-07T11:38:39.267 回答
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
        });
    };

});​
于 2012-07-07T11:46:01.177 回答