그림 윤방-고효율 버전
경계가 높아짐에 따라, 우리는 플러그인을 작성하는 데 점점 효율을 중시한다.그래서 업무 관계를 감안하여 저는 타오바오의 플러그인 디자인을 본떠서 개인적으로 비교적 만족스러운 사진 윤방 플러그인을 썼습니다(타오바오의 플러그인은 버그가 있습니다!)
이 플러그인은angular의directive에 기반을 두고 있음을 미리 설명합니다. (다른 컴파일 형식으로 바꾸기)
특징:
streamModule.directive('picscroll', function() {
return {
restrict: 'E',
scope: {
list: "=",
space: '@'
},
template: [
'<div class="picscroll-con">',
' <div class="outer-con">',
' <div class="inner-con">',
// ' <div class="page" ng-repeat="url in list"><img src="{{url}}"></div>',
' </div>',
' </div>',
' <ul class="points">',
// ' <li ng-class="{\'curLi\': cuIndex == $index}" ng-repeat="url in list"></li>',
' </ul>',
'</div>'
].join(''),
link: function(scope, elem, attr) {
var contain = elem.find('.inner-con');
var points = elem.find('.points');
var width = 0;
var space = Number(scope.space) || 500;
var tmpl = {
page: '<div class="page"><img src="{url}"></div>',
point: '<li index="{index}"></li>',
};
//
contain.css('transition', 'transform ' + space / 1000.0 + 's ease');
contain.css('position', 'relative');
points.bind('click', function(event) {
var tar = event.target || {};
if(tar.nodeName.toUpperCase() != 'LI')
return ;
jump(tar.getAttribute('index'));
});
// ( )
init();
function init() {
var html1 = tmpl.page.replace('{url}', scope.list[scope.list.length - 1]);
var html2 = '';
width = elem.find('.outer-con').width();
for (var i = 0; i < scope.list.length; i++) {
html1 += tmpl.page.replace('{url}', scope.list[i]);
html2 += tmpl.point.replace('{index}', i);
};
html1 += tmpl.page.replace('{url}', scope.list[0]);
contain.html(html1);
points.html(html2);
jump(0);
}
//
var curIndex = 0;
var movebase = 0;
function jump(index) {
index = Number(index);
movebase = movebase || 0;
//
var children = points.children();
var len = children.length;
children.eq(curIndex).removeClass('curLi');
children.eq(index).addClass('curLi');
//
if (index == len - 1 && curIndex == 0) {
//
contain.css('transform', 'translateX(' + -movebase + 'px)');
setTimeout(function() {
movebase = -width * len + movebase;
contain.css('left', movebase + 'px');
}, space);
} else if (index == 0 && curIndex == len - 1) {
//
contain.css('transform', 'translateX(' + (-width * (len + 1) - movebase) + 'px)');
setTimeout(function() {
movebase = width * len + movebase;
contain.css('left', movebase + 'px');
}, space);
} else {
contain.css('transform', 'translateX(' + (-width * (index + 1) - movebase) + 'px)');
}
//
curIndex = index;
}
/**********************
**********************
* ,
* transition translate ,translate ( ),left ( )
* ,
* first->last last->first, , left
* movebase
* movebase
* ( ) len ,
*********************
**********************/
}
};
});
사실 코드 기능은 아직 실현되지 않았다. 예를 들어 자동 윤방 등은 나중에 보충한다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.