大屏 列表上下滚动 插件 liMarquee – jQuery

strWrap.height(strMove.outerHeight())

if (strMove.width() > strWrap.width()) {

var leftPos = -strMove.width();

if (p.circular) {

if (!p.xml) {

circCloneHor()

leftPos = -(strMove.width() + (strMove.width() - strWrap.width()));

}

}

if (p.xml) {

strMove.css({

left:strWrap.width()

})

}

var

strMoveLeft = strWrap.width(),

k1 = 0,

timeFunc1 = function () {

var

fullS = Math.abs(leftPos),

time = (fullS / strWrap.data(‘scrollamount’)) * 1000;

if (parseFloat(strMove.css(‘left’)) != 0) {

fullS = (fullS + strWrap.width());

time = (fullS - (strWrap.width() - parseFloat(strMove.css(‘left’)))) / strWrap.data(‘scrollamount’) * 1000;

}

return time;

},

moveFuncId1 = false,

moveFunc1 = function () {

if (loop != 0) {

strMove.stop(true).animate({

left: leftPos

}, timeFunc1(), ‘linear’, function () {

$(this).css({

left: strWrap.width()

});

if (loop == -1) {

moveFuncId1 = setTimeout(moveFunc1, p.scrolldelay);

} else {

loop–;

moveFuncId1 = setTimeout(moveFunc1, p.scrolldelay);

}

});

}

};

strWrap.data({

moveId: moveFuncId1 ,

moveF : moveFunc1

})

if(!p.inverthover){

moveFunc1();

}

if (p.hoverstop) {

strWrap.on(enterEvent, function () {

$(this).addClass(‘str_active’);

clearTimeout(moveFuncId1);

strMove.stop(true);

}).on(leaveEvent, function () {

$(this).removeClass(‘str_active’);

$(this).off(‘mousemove’);

moveFunc1();

});

if (p.drag) {

strWrap.on(‘mousedown’, function (e) {

if(p.inverthover){

strMove.stop(true);

}

//drag

var dragLeft;

var dir = 1;

var newX;

var oldX = e.clientX;

//drag

strMoveLeft = strMove.position().left;

k1 = strMoveLeft - (e.clientX - strWrap.offset().left);

$(this).on(‘mousemove’, function (e) {

fMove = true;

//drag

newX = e.clientX;

if(newX > oldX){

dir = 1

}else{

dir = -1

}

oldX = newX

dragLeft = k1 + (e.clientX - strWrap.offset().left);

if (!p.circular) {

if(dragLeft < -strMove.width() && dir < 0){

dragLeft = strWrap.width();

strMoveLeft = strMove.position().left;

k1 = strMoveLeft - (e.clientX - strWrap.offset().left);

}

if(dragLeft > strWrap.width() && dir > 0){

dragLeft = -strMove.width();

strMoveLeft = strMove.position().left;

k1 = strMoveLeft - (e.clientX - strWrap.offset().left);

}

}else{

if(dragLeft < -strMove.width() && dir < 0){

dragLeft = 0;

strMoveLeft = strMove.position().left;

k1 = strMoveLeft - (e.clientX - strWrap.offset().left);

}

if(dragLeft > 0 && dir > 0){

dragLeft = -strMove.width();

strMoveLeft = strMove.position().left;

k1 = strMoveLeft - (e.clientX - strWrap.offset().left);

}

}

strMove.stop(true).css({

left: dragLeft

});

//drag

}).on(‘mouseup’, function () {

$(this).off(‘mousemove’);

if(p.inverthover){

strMove.trigger(‘mouseenter’)

}

setTimeout(function () {

fMove = false

}, 50)

});

return false;

})

.on(‘click’, function () {

if (fMove) {

return false

}

});

} else {

strWrap.addClass(‘no_drag’);

};

}

} else {

if (p.runshort) {

strMove.css({

left: strWrap.width()

});

var

strMoveLeft = strWrap.width(),

k1 = 0,

timeFunc = function () {

time = (strMove.width() + strMove.position().left) / strWrap.data(‘scrollamount’) * 1000;

return time;

};

var moveFunc = function () {

var leftPos = -strMove.width();

strMove.animate({

left: leftPos

}, timeFunc(), ‘linear’, function () {

$(this).css({

left: strWrap.width()

});

if (loop == -1) {

setTimeout(moveFunc, p.scrolldelay);

} else {

loop–;

setTimeout(moveFunc, p.scrolldelay);

}

});

};

strWrap.data({

moveF : moveFunc

})

if(!p.inverthover){

moveFunc();

}

if (p.hoverstop) {

strWrap.on(enterEvent, function () {

$(this).addClass(‘str_active’);

strMove.stop(true);

}).on(leaveEvent, function () {

$(this).removeClass(‘str_active’);

$(this).off(‘mousemove’);

moveFunc();

});

if (p.drag) {

strWrap.on(‘mousedown’, function (e) {

if(p.inverthover){

strMove.stop(true);

}

//drag

var dragLeft;

var dir = 1;

var newX;

var oldX = e.clientX;

//drag

strMoveLeft = strMove.position().left;

k1 = strMoveLeft - (e.clientX - strWrap.offset().left);

$(this).on(‘mousemove’, function (e) {

fMove = true;

//drag

newX = e.clientX;

if(newX > oldX){

dir = 1

}else{

dir = -1

}

oldX = newX

dragLeft = k1 + (e.clientX - strWrap.offset().left);

if(dragLeft < -strMove.width() && dir < 0){

dragLeft = strWrap.width();

strMoveLeft = strMove.position().left;

k1 = strMoveLeft - (e.clientX - strWrap.offset().left);

}

if(dragLeft > strWrap.width() && dir > 0){

dragLeft = -strMove.width();

strMoveLeft = strMove.position().left;

k1 = strMoveLeft - (e.clientX - strWrap.offset().left);

}

strMove.stop(true).css({

left: dragLeft

});

}).on(‘mouseup’, function () {

if(p.inverthover){

strMove.trigger(‘mouseenter’)

}

$(this).off(‘mousemove’);

setTimeout(function () {

fMove = false

}, 50)

});

return false;

})

.on(‘click’, function () {

if (fMove) {

return false

}

});

} else {

strWrap.addClass(‘no_drag’);

};

}

} else {

strWrap.addClass(‘str_static’);

}

};

};

if (p.direction == ‘right’) {

strWrap.height(strMove.outerHeight())

strWrap.addClass(‘str_right’);

strMove.css({

left: -strMove.width(),

right: ‘auto’

})

if (strMove.width() > strWrap.width()) {

var leftPos = strWrap.width();

strMove.css({

left: 0

})

if (p.circular) {

if (!p.xml) {

circCloneHor()

//Определяем крайнюю точку

leftPos = strMove.width();

}

}

var

k2 = 0;

timeFunc = function () {

var

fullS = strWrap.width(), //крайняя точка

time = (fullS / strWrap.data(‘scrollamount’)) * 1000; //время

if (parseFloat(strMove.css(‘left’)) != 0) {

fullS = (strMove.width() + strWrap.width());

time = (fullS - (strMove.width() + parseFloat(strMove.css(‘left’)))) / strWrap.data(‘scrollamount’) * 1000;

}

return time;

};

var moveFunc = function () {

if (loop != 0) {

strMove.animate({

left: leftPos

}, timeFunc(), ‘linear’, function () {

$(this).css({

left: -strMove.width()

});

if (loop == -1) {

setTimeout(moveFunc, p.scrolldelay);

} else {

loop–;

setTimeout(moveFunc, p.scrolldelay);

};

});

};

};

strWrap.data({

moveF : moveFunc

})

if(!p.inverthover){

moveFunc();

}

if (p.hoverstop) {

strWrap.on(enterEvent, function () {

$(this).addClass(‘str_active’);

strMove.stop(true);

}).on(leaveEvent, function () {

$(this).removeClass(‘str_active’);

$(this).off(‘mousemove’);

moveFunc();

});

if (p.drag) {

strWrap.on(‘mousedown’, function (e) {

if(p.inverthover){

strMove.stop(true);

}

//drag

var dragLeft;

var dir = 1;

var newX;

var oldX = e.clientX;

//drag

strMoveLeft = strMove.position().left;

k2 = strMoveLeft - (e.clientX - strWrap.offset().left);

$(this).on(‘mousemove’, function (e) {

fMove = true;

//drag

newX = e.clientX;

if(newX > oldX){

dir = 1

}else{

dir = -1

}

oldX = newX

dragLeft = k2 + (e.clientX - strWrap.offset().left);

if (!p.circular) {

if(dragLeft < -strMove.width() && dir < 0){

dragLeft = strWrap.width();

strMoveLeft = strMove.position().left;

k2 = strMoveLeft - (e.clientX - strWrap.offset().left);

}

if(dragLeft > strWrap.width() && dir > 0){

dragLeft = -strMove.width();

strMoveLeft = strMove.position().left;

k2 = strMoveLeft - (e.clientX - strWrap.offset().left);

}

}else{

if(dragLeft < -strMove.width() && dir < 0){

dragLeft = 0;

strMoveLeft = strMove.position().left;

k2 = strMoveLeft - (e.clientX - strWrap.offset().left);

}

if(dragLeft > 0 && dir > 0){

dragLeft = -strMove.width();

strMoveLeft = strMove.position().left;

k2 = strMoveLeft - (e.clientX - strWrap.offset().left);

}

}

strMove.stop(true).css({

left: dragLeft

});

}).on(‘mouseup’, function () {

if(p.inverthover){

strMove.trigger(‘mouseenter’)

}

$(this).off(‘mousemove’);

setTimeout(function () {

fMove = false

}, 50)

});

return false;

})

.on(‘click’, function () {

if (fMove) {

return false

}

});

} else {

strWrap.addClass(‘no_drag’);

};

}

} else {

if (p.runshort) {

var k2 = 0;

var timeFunc = function () {

time = (strWrap.width() - strMove.position().left) / strWrap.data(‘scrollamount’) * 1000;

return time;

};

var moveFunc = function () {

var leftPos = strWrap.width();

strMove.animate({

left: leftPos

}, timeFunc(), ‘linear’, function () {

$(this).css({

left: -strMove.width()

});

if (loop == -1) {

setTimeout(moveFunc, p.scrolldelay);

} else {

loop–;

setTimeout(moveFunc, p.scrolldelay);

};

});

};

strWrap.data({

moveF : moveFunc

})

if(!p.inverthover){

moveFunc();

}

if (p.hoverstop) {

strWrap.on(enterEvent, function () {

$(this).addClass(‘str_active’);

strMove.stop(true);

}).on(leaveEvent, function () {

$(this).removeClass(‘str_active’);

$(this).off(‘mousemove’);

moveFunc();

});

if (p.drag) {

strWrap.on(‘mousedown’, function (e) {

if(p.inverthover){

strMove.stop(true);

}

//drag

var dragLeft;

var dir = 1;

var newX;

var oldX = e.clientX;

//drag

strMoveLeft = strMove.position().left;

k2 = strMoveLeft - (e.clientX - strWrap.offset().left);

$(this).on(‘mousemove’, function (e) {

fMove = true;

//drag

newX = e.clientX;

if(newX > oldX){

dir = 1

}else{

dir = -1

}

oldX = newX

dragLeft = k2 + (e.clientX - strWrap.offset().left);

if(dragLeft < -strMove.width() && dir < 0){

dragLeft = strWrap.width();

strMoveLeft = strMove.position().left;

k2 = strMoveLeft - (e.clientX - strWrap.offset().left);

}

if(dragLeft > strWrap.width() && dir > 0){

dragLeft = -strMove.width();

strMoveLeft = strMove.position().left;

k2 = strMoveLeft - (e.clientX - strWrap.offset().left);

}

strMove.stop(true).css({

left:dragLeft

});

}).on(‘mouseup’, function () {

if(p.inverthover){

strMove.trigger(‘mouseenter’)

}

$(this).off(‘mousemove’);

setTimeout(function () {

fMove = false

}, 50)

});

return false;

})

.on(‘click’, function () {

if (fMove) {

return false

}

});

} else {

strWrap.addClass(‘no_drag’);

};

}

} else {

strWrap.addClass(‘str_static’);

}

};

};

if (p.direction == ‘up’) {

strWrap.addClass(‘str_vertical’);

if (strMove.height() > strWrap.height()) {

var topPos = -strMove.height();

if (p.circular) {

if (!p.xml) {

circCloneVert();

topPos = -(strMove.height() + (strMove.height() - strWrap.height()));

}

}

if (p.xml) {

strMove.css({

top:strWrap.height()

})

}

var

k2 = 0;

timeFunc = function () {

var

fullS = Math.abs(topPos),

time = (fullS / strWrap.data(‘scrollamount’)) * 1000;

if (parseFloat(strMove.css(‘top’)) != 0) {

fullS = (fullS + strWrap.height());

time = (fullS - (strWrap.height() - parseFloat(strMove.css(‘top’)))) / strWrap.data(‘scrollamount’) * 1000;

}

return time;

};

var moveFunc = function () {

if (loop != 0) {

strMove.animate({

top: topPos

}, timeFunc(), ‘linear’, function () {

$(this).css({

top: strWrap.height()

});

if (loop == -1) {

setTimeout(moveFunc, p.scrolldelay);

} else {

loop–;

setTimeout(moveFunc, p.scrolldelay);

};

});

};

};

strWrap.data({

moveF : moveFunc

})

if(!p.inverthover){

moveFunc();

}

if (p.hoverstop) {

strWrap.on(enterEvent, function () {

$(this).addClass(‘str_active’);

strMove.stop(true);

}).on(leaveEvent, function () {

$(this).removeClass(‘str_active’);

$(this).off(‘mousemove’);

moveFunc();

});

if (p.drag) {

strWrap.on(‘mousedown’, function (e) {

if(p.inverthover){

strMove.stop(true);

}

//drag

var dragTop;

var dir = 1;

var newY;

var oldY = e.clientY;

//drag

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

$(this).on(‘mousemove’, function (e) {

fMove = true;

//drag

newY = e.clientY;

if(newY > oldY){

dir = 1

}else{

if(newY < oldY){

dir = -1

}

}

oldY = newY

dragTop = k2 + e.clientY - strWrap.offset().top;

if (!p.circular){

if(dragTop < -strMove.height() && dir < 0){

dragTop = strWrap.height();

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

if(dragTop > strWrap.height() && dir > 0){

dragTop = -strMove.height();

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

}else{

if(dragTop < -strMove.height() && dir < 0){

dragTop = 0;

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

if(dragTop > 0 && dir > 0){

dragTop = -strMove.height();

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

}

strMove.stop(true).css({

top: dragTop

});

//drag

}).on(‘mouseup’, function () {

if(p.inverthover){

strMove.trigger(‘mouseenter’)

}

$(this).off(‘mousemove’);

setTimeout(function () {

fMove = false

}, 50)

});

return false;

})

.on(‘click’, function () {

if (fMove) {

return false

}

});

} else {

strWrap.addClass(‘no_drag’);

};

}

} else {

if (p.runshort) {

strMove.css({

top: strWrap.height()

});

var k2 = 0;

var timeFunc = function () {

time = (strMove.height() + strMove.position().top) / strWrap.data(‘scrollamount’) * 1000;

return time;

};

var moveFunc = function () {

var topPos = -strMove.height();

strMove.animate({

top: topPos

}, timeFunc(), ‘linear’, function () {

$(this).css({

top: strWrap.height()

});

if (loop == -1) {

setTimeout(moveFunc, p.scrolldelay);

} else {

loop–;

setTimeout(moveFunc, p.scrolldelay);

};

});

};

strWrap.data({

moveF : moveFunc

})

if(!p.inverthover){

moveFunc();

}

if (p.hoverstop) {

strWrap.on(enterEvent, function () {

$(this).addClass(‘str_active’);

strMove.stop(true);

}).on(leaveEvent, function () {

$(this).removeClass(‘str_active’);

$(this).off(‘mousemove’);

moveFunc();

});

if (p.drag) {

strWrap.on(‘mousedown’, function (e) {

if(p.inverthover){

strMove.stop(true);

}

//drag

var dragTop;

var dir = 1;

var newY;

var oldY = e.clientY;

//drag

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

$(this).on(‘mousemove’, function (e) {

fMove = true;

//drag

newY = e.clientY;

if(newY > oldY){

dir = 1

}else{

if(newY < oldY){

dir = -1

}

}

oldY = newY

dragTop = k2 + e.clientY - strWrap.offset().top;

if(dragTop < -strMove.height() && dir < 0){

dragTop = strWrap.height();

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

if(dragTop > strWrap.height() && dir > 0){

dragTop = -strMove.height();

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

//*drag

strMove.stop(true).css({

top: dragTop

});

}).on(‘mouseup’, function () {

if(p.inverthover){

strMove.trigger(‘mouseenter’)

}

$(this).off(‘mousemove’);

setTimeout(function () {

fMove = false

}, 50)

});

return false;

})

.on(‘click’, function () {

if (fMove) {

return false

}

});

} else {

strWrap.addClass(‘no_drag’);

};

}

} else {

strWrap.addClass(‘str_static’);

}

};

};

if (p.direction == ‘down’) {

strWrap.addClass(‘str_vertical’).addClass(‘str_down’);

strMove.css({

top: -strMove.height(),

bottom: ‘auto’

})

if (strMove.height() > strWrap.height()) {

var topPos = strWrap.height();

if (p.circular) {

if (!p.xml) {

circCloneVert();

topPos = strMove.height();

}

}

if (p.xml) {

strMove.css({

top:-strMove.height()

})

}

var

k2 = 0;

timeFunc = function () {

var

fullS = strWrap.height(), //крайняя точка

time = (fullS / strWrap.data(‘scrollamount’)) * 1000; //время

if (parseFloat(strMove.css(‘top’)) != 0) {

fullS = (strMove.height() + strWrap.height());

time = (fullS - (strMove.height() + parseFloat(strMove.css(‘top’)))) / strWrap.data(‘scrollamount’) * 1000;

}

return time;

};

var moveFunc = function () {

if (loop != 0) {

strMove.animate({

top: topPos

}, timeFunc(), ‘linear’, function () {

$(this).css({

top: -strMove.height()

});

if (loop == -1) {

setTimeout(moveFunc, p.scrolldelay);

} else {

loop–;

setTimeout(moveFunc, p.scrolldelay);

};

});

};

};

strWrap.data({

moveF : moveFunc

})

if(!p.inverthover){

moveFunc();

}

if (p.hoverstop) {

strWrap.on(enterEvent, function () {

$(this).addClass(‘str_active’);

strMove.stop(true);

}).on(leaveEvent, function () {

$(this).removeClass(‘str_active’);

$(this).off(‘mousemove’);

moveFunc();

});

if (p.drag) {

strWrap.on(‘mousedown’, function (e) {

if(p.inverthover){

strMove.stop(true);

}

//drag

var dragTop;

var dir = 1;

var newY;

var oldY = e.clientY;

//drag

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

$(this).on(‘mousemove’, function (e) {

fMove = true;

//drag

newY = e.clientY;

if(newY > oldY){

dir = 1

}else{

if(newY < oldY){

dir = -1

}

}

oldY = newY

dragTop = k2 + e.clientY - strWrap.offset().top;

if (!p.circular){

if(dragTop < -strMove.height() && dir < 0){

dragTop = strWrap.height();

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

if(dragTop > strWrap.height() && dir > 0){

dragTop = -strMove.height();

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

}else{

if(dragTop < -strMove.height() && dir < 0){

dragTop = 0;

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

if(dragTop > 0 && dir > 0){

dragTop = -strMove.height();

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

}

strMove.stop(true).css({

top: dragTop

});

//drag

}).on(‘mouseup’, function () {

if(p.inverthover){

strMove.trigger(‘mouseenter’)

}

$(this).off(‘mousemove’);

setTimeout(function () {

fMove = false

}, 50)

});

return false;

})

.on(‘click’, function () {

if (fMove) {

return false

}

});

} else {

strWrap.addClass(‘no_drag’);

};

}

} else {

if (p.runshort) {

var k2 = 0;

var timeFunc = function () {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
dragTop = k2 + e.clientY - strWrap.offset().top;

if (!p.circular){

if(dragTop < -strMove.height() && dir < 0){

dragTop = strWrap.height();

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

if(dragTop > strWrap.height() && dir > 0){

dragTop = -strMove.height();

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

}else{

if(dragTop < -strMove.height() && dir < 0){

dragTop = 0;

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

if(dragTop > 0 && dir > 0){

dragTop = -strMove.height();

strMoveTop = strMove.position().top;

k2 = strMoveTop - (e.clientY - strWrap.offset().top);

}

}

strMove.stop(true).css({

top: dragTop

});

//drag

}).on(‘mouseup’, function () {

if(p.inverthover){

strMove.trigger(‘mouseenter’)

}

$(this).off(‘mousemove’);

setTimeout(function () {

fMove = false

}, 50)

});

return false;

})

.on(‘click’, function () {

if (fMove) {

return false

}

});

} else {

strWrap.addClass(‘no_drag’);

};

}

} else {

if (p.runshort) {

var k2 = 0;

var timeFunc = function () {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-riZs39Tk-1715225872529)]

[外链图片转存中…(img-jROCjpMM-1715225872530)]

[外链图片转存中…(img-Jk9Y6Of6-1715225872530)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值