见小提琴:http://jsfiddle.net/mrcarllister/Z2GjN/
基本上,我已经让点击拖动滚动工作,除非你点击和拖动一个锚/链接。
似乎只有当鼠标光标在发布时仍然停留在链接上时,才会遵循url (例如,如果拖得足够远且链接已离开窗口,则运行良好)。
;(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的建议成功了,但我只需要几个修正:
->
干杯,
卡尔
发布于 2012-11-26 15:17:52
好的,这里的问题是,这是使用鼠标上下工作,所以您可以永久禁用锚,否则它会工作,所以您需要有一些业务逻辑来说明什么时候它是开和关。如果您想要编辑可拖动滚动,将其放入代码中,它将工作。
我加了
event.data.initCoord = event.data.lastCoord添加到mouseDownHandler和我
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和我打开了防范性默认
$('#viewport, #inner').
dragscrollable({dragSelector: '.dragger:first', preventDefault: true});发布于 2012-11-22 13:16:19
根据你的例子,这似乎适用于小提琴。
<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>https://stackoverflow.com/questions/13513077
复制相似问题