让我的 JavaScript/jQuery 更干净
我正在尝试提高我的 JavaScript/jQuery 的简洁程度,并且想知道是否有人有任何指示。
当我看到这个时,看起来不太干净......
if (window.jQuery) {
(function ($) {
var podCaption = function ($scope, settings) {
this._settings = $.extend({
openHeight : 75,
expandHeight : 120,
shrinkHeight : 30,
closeHeight : 15,
timer : ''
}, settings);
this._elements = {
scope : $scope,
caption : $('.slider-information', $scope)
};
this.init();
};
podCaption.prototype.init = function() {
var _this = this;
$('.photo-more', _this._elements.caption).live('click', function() {
_this.expand(_this);
});
_this._elements.caption.mouseenter(function() {
_this.open(_this);
}).mouseleave(function() {
_this._settings.timer = setTimeout(function() {
_this.shrink(_this);
}, 1000);
});
};
podCaption.prototype.changeImage = function(photoIndex, image) {
var _this = this;
//Shrink out content
_this.close(_this, function() {
//Build content - NOTE i'm actually doing some template stuff here but I'm trying to make the code a little less verbose for the question at hand
_this._elements.caption.empty();
_this._elements.caption.append('<div><div class="photo-description">..</div><div class="photo-more">...</div><div class="photo-info">...</div></div>');
_this.open(_this, function() {
_this._settings.timer = setTimeout(function() {
_this.shrink(_this);
}, 4500);
});
});
};
podCaption.prototype.expand = function(_this, callback) {
clearTimeout(_this._settings.timer);
var caption = _this._elements.caption;
$('.photo-more', caption).hide();
$('.photo-info', caption).fadeIn();
caption.animate({ height : _this._setting.expandHeight, opacity : 0.8 }, 500, callback);
}
podCaption.prototype.open = function(_this, callback) {
clearTimeout(_this._settings.timer);
_this._elements.caption.animate({ height : _this._setting.openHeight, opacity : 0.8 }, 500, callback);
}
podCaption.prototype.close = function(_this, callback) {
clearTimeout(_this._settings.timer);
var caption = _this._elements.caption;
caption.children().fadeOut();
caption.animate({ height : _this._setting.closeHeight, opacity : 0.2 }, 400, callback);
}
podCaption.prototype.shrink = function(_this, callback) {
clearTimeout(_this._settings.timer);
var caption = _this._elements.caption;
$('.photo-info', caption).fadeOut(function() { $('.photo-more', caption).show(); });
caption.animate({ height : _this._setting.shrinkHeight, opacity : 0.3 }, 400, callback);
}
$.fn.podCaption = function (options) {
return new podCaption(this, options);
};
})(jQuery);
}
I'm trying to improve how clean my JavaScript/jQuery is and was wondering if anyone has any pointers.
When I look at this is just doesn't look clean...
if (window.jQuery) {
(function ($) {
var podCaption = function ($scope, settings) {
this._settings = $.extend({
openHeight : 75,
expandHeight : 120,
shrinkHeight : 30,
closeHeight : 15,
timer : ''
}, settings);
this._elements = {
scope : $scope,
caption : $('.slider-information', $scope)
};
this.init();
};
podCaption.prototype.init = function() {
var _this = this;
$('.photo-more', _this._elements.caption).live('click', function() {
_this.expand(_this);
});
_this._elements.caption.mouseenter(function() {
_this.open(_this);
}).mouseleave(function() {
_this._settings.timer = setTimeout(function() {
_this.shrink(_this);
}, 1000);
});
};
podCaption.prototype.changeImage = function(photoIndex, image) {
var _this = this;
//Shrink out content
_this.close(_this, function() {
//Build content - NOTE i'm actually doing some template stuff here but I'm trying to make the code a little less verbose for the question at hand
_this._elements.caption.empty();
_this._elements.caption.append('<div><div class="photo-description">..</div><div class="photo-more">...</div><div class="photo-info">...</div></div>');
_this.open(_this, function() {
_this._settings.timer = setTimeout(function() {
_this.shrink(_this);
}, 4500);
});
});
};
podCaption.prototype.expand = function(_this, callback) {
clearTimeout(_this._settings.timer);
var caption = _this._elements.caption;
$('.photo-more', caption).hide();
$('.photo-info', caption).fadeIn();
caption.animate({ height : _this._setting.expandHeight, opacity : 0.8 }, 500, callback);
}
podCaption.prototype.open = function(_this, callback) {
clearTimeout(_this._settings.timer);
_this._elements.caption.animate({ height : _this._setting.openHeight, opacity : 0.8 }, 500, callback);
}
podCaption.prototype.close = function(_this, callback) {
clearTimeout(_this._settings.timer);
var caption = _this._elements.caption;
caption.children().fadeOut();
caption.animate({ height : _this._setting.closeHeight, opacity : 0.2 }, 400, callback);
}
podCaption.prototype.shrink = function(_this, callback) {
clearTimeout(_this._settings.timer);
var caption = _this._elements.caption;
$('.photo-info', caption).fadeOut(function() { $('.photo-more', caption).show(); });
caption.animate({ height : _this._setting.shrinkHeight, opacity : 0.3 }, 400, callback);
}
$.fn.podCaption = function (options) {
return new podCaption(this, options);
};
})(jQuery);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
而不是这个:
这个怎么样:
另外,这个:
可以链接:
或者只是这个:
另外,您可以以对象文字形式定义原型:
Instead of this:
how about this:
Also, this:
can be chained:
or just this:
Also, you could define the prototype in object literal form:
也许是这样的。主要变化:扩展原型,this范围,out if语句
maybe like this. main change:extend prototype,this scope,out if statement
尝试使用 JSLint http://www.jslint.com/ 来美化代码(如果您就是这样的话)。 。
Try using JSLint http://www.jslint.com/ to prettify the code if that's what you what...