121 lines
6.3 KiB
JavaScript
121 lines
6.3 KiB
JavaScript
|
|
/**
|
|||
|
|
* Created by fuximin on 2019/9/20.
|
|||
|
|
*/
|
|||
|
|
$(function(){
|
|||
|
|
$.fn.extend({
|
|||
|
|
"suspensionTips": function (options) {
|
|||
|
|
var tips = {
|
|||
|
|
config : {
|
|||
|
|
verticalMargin : 13, // 垂直边距
|
|||
|
|
horizontalMargin: 13, // 水平边距
|
|||
|
|
position: 'top', // 浮动位置, 默认上方,支持top、bottom、left、right
|
|||
|
|
sharpX : 23, // Tips突出部分中心店距离左右两边的长度
|
|||
|
|
sharpY : 20, // Tips突出部分中心店距离上边的高度
|
|||
|
|
content: "",
|
|||
|
|
width : 200,
|
|||
|
|
positionClass : 'common-tips'
|
|||
|
|
|
|||
|
|
},
|
|||
|
|
init : function (options) {
|
|||
|
|
this.config.positionClass = 'common-tips'
|
|||
|
|
this.config = $.extend({}, this.config, options);
|
|||
|
|
var div = $("<div></div>");
|
|||
|
|
div.addClass("common-tips-container common-tips-hide");
|
|||
|
|
div.text(this.config.content);
|
|||
|
|
div.attr("id","common-tips");
|
|||
|
|
$(document.body).append(div);
|
|||
|
|
div.css({
|
|||
|
|
"width" : this.config.width + "px",
|
|||
|
|
// "animation":"common-tips-show " + this.config.speed + "s ease-in",
|
|||
|
|
// "-webkit-animation":"common-tips-show " + this.config.speed + "s ease-in",
|
|||
|
|
});
|
|||
|
|
this.calcTop(div);
|
|||
|
|
this.calcLeft(div);
|
|||
|
|
|
|||
|
|
div.addClass("common-tips-animation");
|
|||
|
|
div.addClass(this.config.positionClass);
|
|||
|
|
div.removeClass("common-tips-hide");
|
|||
|
|
},
|
|||
|
|
calcTop : function(tipsDiv){
|
|||
|
|
//计算top位置
|
|||
|
|
var top = this.config.elementPosition.top - tipsDiv.outerHeight() - this.config.verticalMargin;
|
|||
|
|
if(this.config.mousePosition.top < (tipsDiv.outerHeight() + this.config.verticalMargin) || this.config.position == "bottom"){
|
|||
|
|
top = top + tipsDiv.outerHeight() + this.config.verticalMargin + this.config.elementHeight + this.config.verticalMargin;
|
|||
|
|
// tipsDiv.addClass("common-tips-bottom-left");
|
|||
|
|
this.config.positionClass += '-bottom';
|
|||
|
|
}else{
|
|||
|
|
this.config.positionClass += '-top';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(this.config.position == "left" || this.config.position == "right"){
|
|||
|
|
top = this.config.elementPosition.top + this.config.elementHeightHalf - this.config.sharpY;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
tipsDiv.css("top", top);
|
|||
|
|
},
|
|||
|
|
calcLeft : function (tipsDiv) {
|
|||
|
|
//计算left位置
|
|||
|
|
var left = 0;
|
|||
|
|
var windowWidth = window.innerWidth;//document.body.offsetWidth;
|
|||
|
|
var marginRight = windowWidth - this.config.mousePosition.left;
|
|||
|
|
if(this.config.position == "top" || this.config.position == "bottom"){
|
|||
|
|
if(marginRight < (tipsDiv.outerWidth() - this.config.sharpX)){
|
|||
|
|
//如果鼠标局里右边的距离小于tips框的宽度,则表示放不下了,那么就应该往左边偏
|
|||
|
|
left = this.config.elementPosition.left - tipsDiv.outerWidth() + this.config.sharpX + this.config.elementWidthHalf;
|
|||
|
|
this.config.positionClass += '-left';
|
|||
|
|
}else{
|
|||
|
|
left = this.config.elementPosition.left + this.config.elementWidthHalf - this.config.sharpX;
|
|||
|
|
this.config.positionClass += '-right';
|
|||
|
|
}
|
|||
|
|
}else if(this.config.position == "left"){
|
|||
|
|
if(this.config.mousePosition.left < tipsDiv.outerWidth()){
|
|||
|
|
//鼠标的坐标位置小于div的宽度就得出现在右边
|
|||
|
|
this.config.positionClass = "common-tips-right-right";
|
|||
|
|
left = this.config.elementPosition.left + this.config.elementWidth + this.config.horizontalMargin;
|
|||
|
|
}else{
|
|||
|
|
//否则在左边
|
|||
|
|
this.config.positionClass = "common-tips-left-left";
|
|||
|
|
left = this.config.elementPosition.left - tipsDiv.outerWidth() - this.config.horizontalMargin;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}else{
|
|||
|
|
this.config.positionClass = "common-tips-right-right";
|
|||
|
|
left = this.config.elementPosition.left + this.config.elementWidth + this.config.horizontalMargin;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
tipsDiv.css("left", left);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$(this).on("mouseover", function(e){
|
|||
|
|
var mousePosition = {
|
|||
|
|
top : e.clientY - e.offsetY,
|
|||
|
|
left : e.clientX - e.offsetX + $(this).outerWidth()/2
|
|||
|
|
};
|
|||
|
|
options.element=$(this);
|
|||
|
|
options.elementPosition= $(this).offset();
|
|||
|
|
options.elementWidth=$(this).outerWidth();
|
|||
|
|
options.elementWidthHalf=$(this).outerWidth()/2;
|
|||
|
|
options.elementHeight = $(this).outerHeight();
|
|||
|
|
options.elementHeightHalf = $(this).outerHeight()/2;
|
|||
|
|
options.mousePosition = mousePosition;
|
|||
|
|
// options.positionClass = 'common-tips';
|
|||
|
|
tips.init(options);
|
|||
|
|
|
|||
|
|
});
|
|||
|
|
$(this).on("mouseout", function(){
|
|||
|
|
$("#common-tips").addClass("common-tips-container-hide");
|
|||
|
|
document.getElementById("common-tips").addEventListener('webkitAnimationEnd', function () {
|
|||
|
|
$("#common-tips").remove();
|
|||
|
|
}, false);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
$("#img1").suspensionTips({"content": "这是出现在上方的提示信息。", position:"top"});
|
|||
|
|
$("#img2").suspensionTips({"content": "这是出现在右方的提示信息。", position:"right"});
|
|||
|
|
$("#img3").suspensionTips({"content": "这是出现在下方的提示信息。", position:"bottom"});
|
|||
|
|
$("#img4").suspensionTips({"content": "这是出现在左方的提示信息。", position:"left"});
|
|||
|
|
|
|||
|
|
});
|
|||
|
|
|