影响类的所有成员而不是一个元素事件的插件正在发生
plugin affecting all members of class instead of one element event is taking place on
我写了一个jQuery插件来缩小一个对象。
我有多个对象需要页面的这种交互,所以我给了它们一个类并将插件应用于该类。
但是,当我捏住一个时,该类的所有成员都被缩放了。
如何更改插件,以便仅缩放我正在捏合的插件?
以下是该页面的实时示例:http://goo.gl/OW5PKc
这是插件:
function collapse(container, element){
container = $(container).hammer({
prevent_default: true,
scale_treshold: 0
});
element = $(element);
var displayWidth = container.width();
var displayHeight = container.height();
var MIN_ZOOM = 0;
var MAX_ZOOM = 1;
var scaleFactor = 1;
var previousScaleFactor = 1;
var startX = 0;
var startY = 0;
var translateX = 0;
var translateY = 0;
var previousTranslateX = 0;
var previousTranslateY = 0;
var time = 1;
var tch1 = 0,
tch2 = 0,
tcX = 0,
tcY = 0,
toX = 0,
toY = 0,
cssOrigin = "";
container.bind("transformstart", function(event){
e = event
tch1 = [e.touches[0].x, e.touches[0].y],
tch2 = [e.touches[1].x, e.touches[1].y]
tcX = (tch1[0]+tch2[0])/2,
tcY = (tch1[1]+tch2[1])/2
toX = tcX
toY = tcY
var left = $(element).offset().left;
var top = $(element).offset().top;
cssOrigin = (-(left) + toX)/scaleFactor +"px "+ (-(top) + toY)/scaleFactor +"px";
});
container.bind("transform", function(event){
scaleFactor = previousScaleFactor * event.scale;
scaleFactor = Math.max(MIN_ZOOM, Math.min(scaleFactor, MAX_ZOOM));
transform(event);
});
container.bind("transformend", function(event){
previousScaleFactor = scaleFactor;
if(scaleFactor > 0.42){
$(element).css('-webkit-transform', 'scaleY(1.0)').css('transform', 'scaleY(1.0)');
}
});
function transform(e){
var cssScale = "scaleY("+ scaleFactor +")";
element.css({
webkitTransform: cssScale,
webkitTransformOrigin: cssOrigin,
transform: cssScale,
transformOrigin: cssOrigin,
});
if(scaleFactor <= 0.42){
$(element).animate({height:0}, function(){
$(this).remove();
});
}
}
}
$.fn.collapse = function(filter) {
return this.each(function(){
collapse(this,filter);
});
}
您传入的过滤器对象很可能是 jQuery 对象(对象数组)。 目标(容器)上有this.each,但不包含所有对象的筛选器。 我不会将过滤器作为参数传递。 相反,在 collapse() 内部使用选择器(子或父)
更新:
$.fn.collapse = function() {
return this.each(function(){
collapse(this);
});
}
如果过滤器是容器的子项,则函数的开头变为:
function collapse(container){
container = $(container).hammer({
prevent_default: true,
scale_treshold: 0
});
element = $('.elementClass', container);
如果您不知道要使用哪个选择器,可以在此处更熟悉它们。http://api.jquery.com/category/selectors/
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 将事件聚焦/模糊在可编辑内容的元素上
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 在IE8中不起作用的元素上触发单击事件
- 正在ng重复元素上添加事件
- 单击p元素时的javascript触发事件
- 存在每个时间元素的javascript事件
- Firefox:点击并更改未附加到文档树中的复选框元素上的事件
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 将jQuery事件应用于所有类元素
- 在IE8上使用jQuery克隆HTML5元素和事件
- 单击其他元素时,我如何使用 jQuery 忽略更改事件
- 访问代码生成的输入元素上的keyup事件
- 如何查明鼠标按下事件是否发生在滚动条上或元素中的其他任何位置
- 当元素到达屏幕上的某个位置时触发事件
- Mootools:如何在点击时保持元素高亮显示并停止所有事件
- 将事件侦听器添加到文档,而不是签入元素存在,然后添加事件侦听器
- JQuery:使用clone()生成的元素不采用原始的事件属性
- 从其他元素上的单击事件访问image src属性
- 触发“三个”的点击事件.元素