首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击并拖动到滚动时禁用链接(jQuery)

问单击并拖动到滚动时禁用链接(jQuery)
EN

Stack Overflow用户
提问于 2012-11-22 12:47:53
回答 2查看 3.5K关注 0票数 6

见小提琴:http://jsfiddle.net/mrcarllister/Z2GjN/

基本上,我已经让点击拖动滚动工作,除非你点击和拖动一个锚/链接。

似乎只有当鼠标光标在发布时仍然停留在链接上时,才会遵循url (例如,如果拖得足够远且链接已离开窗口,则运行良好)。

代码语言:javascript
复制
;(function($){ 

$.fn.scrollsync = function( options ){
var settings = $.extend(
        {   
            targetSelector:':first',
            axis: 'xy'
        },options || {});


function scrollHandler(event) {
    if (event.data.xaxis){
        event.data.followers.scrollLeft(event.data.target.scrollLeft());
    }
    if (event.data.yaxis){
        event.data.followers.scrollTop(event.data.target.scrollTop());
    }
}

settings.target = this.filter(settings.targetSelector).filter(':first');
settings.followers=this.not(settings.target); // the rest of elements

settings.xaxis= (settings.axis=='xy' || settings.axis=='x') ? true : false; 
settings.yaxis= (settings.axis=='xy' || settings.axis=='y') ? true : false;
if (!settings.xaxis && !settings.yaxis) return;  

settings.target.bind('scroll', settings, scrollHandler);

};

})( jQuery ); 

;(function($){




$.fn.dragscrollable = function( options ){

var settings = $.extend(
    {   
        dragSelector:'>:first',
        acceptPropagatedEvent: true,
        preventDefault: true
    },options || {});


var dragscroll= {
    mouseDownHandler : function(event) {

        if (event.which!=1 ||
            (!event.data.acceptPropagatedEvent && event.target != this)){ 
            return false; 
        }


        event.data.lastCoord = {left: event.clientX, top: event.clientY}; 


        $.event.add( document, "mouseup", 
                     dragscroll.mouseUpHandler, event.data );
        $.event.add( document, "mousemove", 
                     dragscroll.mouseMoveHandler, event.data );
        if (event.data.preventDefault) {
            event.preventDefault();
            return false;
        }
    },
    mouseMoveHandler : function(event) { 


        var delta = {left: (event.clientX - event.data.lastCoord.left),
                     top: (event.clientY - event.data.lastCoord.top)};

        event.data.scrollable.scrollLeft(
                        event.data.scrollable.scrollLeft() - delta.left);
        event.data.scrollable.scrollTop(
                        event.data.scrollable.scrollTop() - delta.top);


        event.data.lastCoord={left: event.clientX, top: event.clientY}
        if (event.data.preventDefault) {
            event.preventDefault();
            return false;
        }

    },
    mouseUpHandler : function(event) { 
        $.event.remove( document, "mousemove", dragscroll.mouseMoveHandler);
        $.event.remove( document, "mouseup", dragscroll.mouseUpHandler);
        if (event.data.preventDefault) {
            event.preventDefault();
            return false;
        }
    }
}


this.each(function() {

    var data = {scrollable : $(this),
                acceptPropagatedEvent : settings.acceptPropagatedEvent,
                preventDefault : settings.preventDefault }

    $(this).find(settings.dragSelector).
                    bind('mousedown', data, dragscroll.mouseDownHandler);
});
}; 

})( jQuery ); 

​

我非常确定,对于锚,我必须返回:false;,但我不知道只有在拖动/滚动时才能这样做。

任何帮助都将不胜感激。

编辑-Ian的建议成功了,但我只需要几个修正:

  1. 只上下滚动(不是左或右)
  2. 仅限于内容/ div大小,并且不再滚动。

->

干杯,

卡尔

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-26 15:17:52

好的,这里的问题是,这是使用鼠标上下工作,所以您可以永久禁用锚,否则它会工作,所以您需要有一些业务逻辑来说明什么时候它是开和关。如果您想要编辑可拖动滚动,将其放入代码中,它将工作。

http://jsfiddle.net/Z2GjN/33/

我加了

代码语言:javascript
复制
event.data.initCoord = event.data.lastCoord

添加到mouseDownHandler和我

代码语言:javascript
复制
        if(event.data.lastCoord != event.data.initCoord){
            obj = $(this);
            $('a', obj).on('click', function(event) {
             event.preventDefault();                      
            });
            setTimeout(function(){$('a', obj).off('click'); },300);
        }

向mouseUpHandler和我打开了防范性默认

代码语言:javascript
复制
$('#viewport, #inner').
        dragscrollable({dragSelector: '.dragger:first', preventDefault: true});
票数 2
EN

Stack Overflow用户

发布于 2012-11-22 13:16:19

根据你的例子,这似乎适用于小提琴。

代码语言:javascript
复制
<head>
    <title>iPhone Test</title>
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/base/jquery-ui.css" />
    <script src="http://code.jquery.com/jquery-1.8.2.js"></script>
    <script src="http://code.jquery.com/ui/1.9.1/jquery-ui.js"></script>

<script type="text/javascript">
  $(document).ready(function() {


    // Set drag scroll on first descendant of class dragger on both selected elements
    $('.dragger').
        draggable({ start:function(){ console.log("HI");

    }});

  });

</script>


</head>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13513077

复制
相关文章

相似问题

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