calliphers.js
define(function(){
var callipers = {};
var spaceWidth = 7; // 间隔
var height = 50; // 默认高度
var callipersHtml = "<div class='swiper-container'> "+
" <div class='swiper-wrapper'> "+
" <div class='swiper-slide'> "+
" <div class='callipers-content'></div>"+
" </div> "+
" </div> "+
"</div> "+
"<canvas></canvas> ";
// 获取数字长度
function getNumberLength(number){
var str = ""+number;
return str.length;
}
function createImage(container,width,height,minValue,maxValue){
var containerWidth = $(container).width();
var c=$(container).find("canvas")[0];
var ctx=c.getContext("2d");
var multiplyingPower=2;
c.width=width*multiplyingPower;
c.height=height*multiplyingPower;
ctx.strokeStyle="#36384d";
ctx.lineWidth=1*multiplyingPower;
// 绘制底部线条
ctx.beginPath();
ctx.moveTo(containerWidth/2*multiplyingPower,height*multiplyingPower);
ctx.lineTo(width*multiplyingPower-containerWidth/2*multiplyingPower,height*multiplyingPower);
ctx.stroke();
// 绘制
for(var i=minValue;i<=maxValue;i++){
var newIndex = spaceWidth*(i-minValue)+containerWidth/2;
ctx.moveTo(newIndex*multiplyingPower,50*multiplyingPower);
if(i==minValue){
ctx.fillStyle="#959AB9";
ctx.font="24px Arial ";
ctx.fillText(i,(newIndex-3)*multiplyingPower,28*multiplyingPower);
ctx.lineTo(newIndex*multiplyingPower,35*multiplyingPower);
}else if(i%10==0){// 绘制长线
ctx.font="24px Arial";
ctx.fillText(i,(newIndex-6*(getNumberLength(i)-1))*multiplyingPower,28*multiplyingPower);
ctx.lineTo(newIndex*multiplyingPower,35*multiplyingPower);
}else{//绘制短线
ctx.lineTo(newIndex*multiplyingPower,43*multiplyingPower);
}
ctx.stroke();
}
var p_w_picpathDataUrl = c.toDataURL();
$(container).find("canvas").remove(); // 删除canvas
return p_w_picpathDataUrl;
}
function resetSwiperTransition(swiper){
var translate = swiper.getWrapperTranslate();
var offset = translate%spaceWidth;
offset = offset*-1;
if(offset>spaceWidth/2){
translate = (parseInt(translate/spaceWidth)-1)*spaceWidth;
}else{
translate = (parseInt(translate/spaceWidth))*spaceWidth;
}
swiper.setWrapperTranslate(translate);
var offsetValue = translate/spaceWidth*-1;
return offsetValue;
}
function render(container,settings){
settings = settings||{};
var minValue = settings.min||0;
var maxValue = settings.max||200;
var progressCallback = settings.progressCallback||function(){};
var transitionEndCallback = settings.transitionEndCallback||function(){};
var initValue = settings.initValue||parseInt((maxValue-minValue)/2+minValue);
var containerWidth= $(container).width();
var width = spaceWidth*(maxValue-minValue)+containerWidth;
$(container).html(callipersHtml);
container.attr("data-min",minValue);
container.attr("data-max",maxValue);
var dataURL = createImage(container,width,height,minValue,maxValue);
$(container).find(".callipers-content").css({
"background-p_w_picpath":"url("+ dataURL+")",
"width":width+"px"
});
setTimeout(function(){
$(container).find(".swiper-container").swiper({
runCallbacksOnInit:false,
freeModeMomentumRatio:0.2,
touchRatio:0.5,
slidesPerView: "auto",
resistanceRatio: 0,
freeMode: true,
onInit:function(swiper){
var value = resetSwiperTransition(swiper)+minValue;
var offset = (initValue-minValue)*spaceWidth*-1;
swiper.setWrapperTranslate(offset);
container.attr("data-value",initValue);
swiper.updateProgress();
container.addClass("initialized");
},
onTouchEnd:function(swiper){
var value = resetSwiperTransition(swiper)+minValue;
transitionEndCallback(value);
container.attr("data-value",value);
},
onTransitionEnd:function(swiper){
var value = resetSwiperTransition(swiper)+minValue;
transitionEndCallback(value);
container.attr("data-value",value);
},
onProgress:function(swiper,progress){
var value = parseInt(swiper.getWrapperTranslate()/spaceWidth)*-1+minValue;
progressCallback(value);
container.attr("data-value",value);
}
});
},100);
// init swiper
}
// 初始化 标尺
function init(settings){
var container = settings.container;
$(container).each(function(){
render($(this),settings);
});
}
callipers.init = init;
return callipers;
});
calliphers.css
.callipers{position:relative;opacity:0;}
.callipers.initialized{
opacity:1;
}
.callipers canvas{display:none;}
.callipers:before{
content:"";
position:absolute;
left:0;
bottom:0;
right:0;
width:1px;
height:47px;
background-color:#b540a8;
margin:auto;
z-index: 99;
}
.callipers .callipers-content{
height:50px;
background:no-repeat center center;
background-size:contain;
}
.callipers .swiper-container{padding:0;}
.callipers .swiper-container .swiper-wrapper{height:auto;}
.callipers .swiper-container .swiper-slide{width:auto;height:auto;}
test.html
<div class="page-group">
<div class="page" id="register-base-height">
<div class="content">
<div class="callipers "></div>
</div><!-- content -->
</div><!-- page -->
</div><!-- page-group -->
test.js
define(["callipers"], function(callipers) {
$(document).on("pageInit", "#test", function(e, pageId, $page) {
callipers.init({
container:$page.find(".callipers"),
min:20,
max:220,
initValue:90,
progressCallback:function(value){
console.log("value");
},
transitionEndCallback:function(value){
console.log("value");
}
});
});
$.init();
});
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。