最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

angularjs 指令實現(xiàn)自定義滾動條效果

 更新時間:2024年03月20日 11:20:08   作者:發(fā)啊發(fā)程序猿  
橫向商品欄,把原有的滾動條改成自定義的樣式,并且給兩邊加上箭頭可以調整,可以拖動商品和滾輪實現(xiàn)滾動條效果,這篇文章主要介紹了angularjs 指令實現(xiàn)自定義滾動條效果,需要的朋友可以參考下

場景:橫向商品欄,把原有的滾動條改成自定義的樣式,并且給兩邊加上箭頭可以調整,可以拖動商品和滾輪實現(xiàn)滾動條效果。

js

appService.directive('customScrollbar', function() {
    return {
        restrict: 'A',
        transclude: true,
        scope: {
            enableMouseWheel: '=?' // default false
        },
        template: `
            <div class="customScrollbar">
                <div class="scrollContent">
                    <div class="detailContent" ng-mouseenter="enableMouseWheel === true && enableWheelScroll()" ng-mouseleave="enableMouseWheel === true && disableWheelScroll()" id="detailContent" ng-transclude>
                    </div>
                    <div class="scrollBarContent">
                        <div class="scrollbar">
                            <div class="scrollbar-thumb"></div>
                        </div>
                        <img src="./images/home/icon_left.png" alt="Left Arrow" class="scroll-arrow left">
                        <img src="./images/home/icon_right.png" alt="Right Arrow" class="scroll-arrow right">
                    </div>
                </div>
            </div>
        `,
        link: function(scope, element) {
            if (scope.enableMouseWheel === undefined) {
                scope.enableMouseWheel = false;
            }
            var content = element.find('.detailContent');
            var scrollbar = element.find('.scrollbar');
            var thumb = element.find('.scrollbar-thumb');
            var leftArrow = element.find('.scroll-arrow.left');
            var rightArrow = element.find('.scroll-arrow.right');
            checkArrowVisibilityByInit();
            content.scroll(function() {
                var scrollLeft = content.scrollLeft();
                var scrollRatio = scrollLeft / (content[0].scrollWidth - content.width());
                var newLeft = scrollRatio * (scrollbar.width() - thumb.width());
                thumb.css('left', newLeft);
                checkArrowVisibilityByScroll(scrollLeft);
            });
            leftArrow.click(function() {
                var newScrollLeft = content.scrollLeft() - 500;
                content.animate({scrollLeft: newScrollLeft}, 500);
            });
            rightArrow.click(function() {
                var newScrollLeft = content.scrollLeft() + 500;
                content.animate({scrollLeft: newScrollLeft}, 500);
            });
            var isDragging = false;
            var startX, startLeft;
            thumb.mousedown(function(e) {
                isDragging = true;
                startX = e.pageX;
                startLeft = thumb.position().left;
                e.preventDefault();
            });
            $(document).mousemove(function(e) {
                if (isDragging) {
                    var offsetX = e.pageX - startX;
                    var newLeft = Math.min(Math.max(0, startLeft + offsetX), scrollbar.width() - thumb.width());
                    var scrollRatio = newLeft / (scrollbar.width() - thumb.width());
                    var newScrollLeft = scrollRatio * (content[0].scrollWidth - content.width());
                    thumb.css('left', newLeft);
                    content.scrollLeft(newScrollLeft);
                }
            }).mouseup(function() {
                isDragging = false;
            });
            function checkArrowVisibilityByInit() {
                if (content.width() >= content[0].scrollWidth) {
                    leftArrow.hide();
                    rightArrow.hide();
                } else {
                    leftArrow.hide(); //init content.scrollLeft() = 0;
                    rightArrow.show();
                }
            }
            function checkArrowVisibilityByScroll(scrollLeft) {
                if (scrollLeft === 0) {
                    leftArrow.hide();
                } else {
                    leftArrow.show();
                }
                if (scrollLeft >= content[0].scrollWidth - content.width()) {
                    rightArrow.hide();
                } else {
                    rightArrow.show();
                }
            }
            //============ Enable wheel scrolling when mouse enters
            scope.enableWheelScroll = function() {
                element.on('wheel', function(e) {
                    e.preventDefault();
                    const delta = e.originalEvent.deltaY;
                    content.scrollLeft(content.scrollLeft() + delta);
                });
            };
            scope.disableWheelScroll = function() {
                element.off('wheel');
            };
            //============ end
            //============ Implement scrollbar effect when dragging products with the mouse
            var isFinancialContentMouseDown = false;
            var startX;
            var scrollLeft;
            content.on('mousedown', function(e) {
                isFinancialContentMouseDown = true;
                startX = e.pageX - $(this).offset().left;
                scrollLeft = $(this).scrollLeft();
            });
            content.on('mousemove', function(e) {
                if (!isFinancialContentMouseDown) return;
                e.preventDefault();
                const x = e.pageX - $(this).offset().left;
                const walk = (x - startX) * 3;
                $(this).scrollLeft(scrollLeft - walk);
            });
            $(document).on('mouseup', function() {
                isFinancialContentMouseDown = false;
            });
            content.on('mouseleave', function() {
                isFinancialContentMouseDown = false;
            });
            //============end
        }
    };
});

css

/*customscroll*/
.customScrollbar .detailContent{width: 100%;display: flex;margin-top: 102px;gap: 30px;overflow-y: auto;overflow-x: hidden;}
.customScrollbar .scrollContent{position: relative}
.customScrollbar .scrollBarContent{width: 100%;display: flex;justify-content: center;margin-top: 40px}
.customScrollbar .scrollbar {width: 410px;height: 6px;background-color: #DAD2D2;position: absolute;bottom: 0;left: 50%;cursor: pointer;border-radius: 15px;transform: translateX(-50%);}
.customScrollbar .scrollbar-thumb {width: 96px;height: 133%;background-color: #E43134;position: absolute;left: 0;cursor: pointer;border-radius: 15px;top:-1px}
.customScrollbar .scroll-arrow {position: absolute;top:  calc(50% - 40px);;transform: translateY(-50%);cursor: pointer;}
.customScrollbar .scroll-arrow.left {left: 0;transform: translateX(-150%);width: 44px;height: 44px;}
.customScrollbar .scroll-arrow.right {right: 0;transform: translateX(150%);width: 44px;height: 44px;}

html

<!--  custom-scrollbar="home"可以改成 custom-scrollbar,
						加了home是為了后面可能有多個滾動條的時候添加的唯一標識,但代碼還沒實現(xiàn),遇到再改-->
				<div custom-scrollbar="home">
				<!-- 里面的item自己填上,一般都是循環(huán)load items出來-->
					<div class="box textBg fundBg">
						<span class="text">{{'webPage.body.home.A'|translate}}</span>
					</div>
					<div class="box textBg bondBg">
						<span class="text">{{'webPage.body.home.B'|translate}}</span>
					</div>
					<div class="box textBg structureBg">
						<span class="text">{{'webPage.body.home.C'|translate}}</span>
					</div>
					<div class="box textBg cryptocurrencyBg">
						<span class="text">{{'webPage.body.home.D'|translate}}</span>
					</div>
					<div class="box textBg swapsBg">
						<span class="text">{{'webPage.body.home.E'|translate}}</span>
					</div>
				</div>

效果

到此這篇關于angularjs 指令實現(xiàn)自定義滾動條效果的文章就介紹到這了,更多相關angularjs 自定義滾動條內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 實例解析angularjs的filter過濾器

    實例解析angularjs的filter過濾器

    本文對angularjs的filter過濾器進行系統(tǒng)介紹,附上實例解析,便于理解。具有很好的參考價值,需要的朋友可以看下
    2016-12-12
  • angular4 JavaScript內存溢出問題

    angular4 JavaScript內存溢出問題

    本篇文章主要介紹了angular4 JavaScript內存溢出問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • AngularJS 表達式詳解及實例代碼

    AngularJS 表達式詳解及實例代碼

    這篇文章主要介紹了AngularJS 表達式,這里整理了詳細的資料,有需要的小伙伴可以參考下
    2016-09-09
  • Angular項目里ngsw-config.json文件作用詳解

    Angular項目里ngsw-config.json文件作用詳解

    這篇文章主要為大家介紹了Angular項目里ngsw-config.json文件作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • AngularJS 輸入驗證詳解及實例代碼

    AngularJS 輸入驗證詳解及實例代碼

    本文主要介紹AngularJS 輸入驗證,這里對AngularJS 輸入驗證的資料做了整理,并附簡單實例代碼和效果圖,有需要的小伙伴參考下
    2016-07-07
  • 整理AngularJS中的一些常用指令

    整理AngularJS中的一些常用指令

    這篇文章主要介紹了整理AngularJS中的一些常用指令,包括ng-app、ng-init、ng-model和ng-repeat這四個指令的講解,需要的朋友可以參考下
    2015-06-06
  • 利用angular.copy取消變量的雙向綁定與解析

    利用angular.copy取消變量的雙向綁定與解析

    眾所周知AngularJS的雙向綁定在表單應用中強大又方便,但是偶爾會遇到需要解除對象變量的雙向綁定。Angular提供的angular.copy的方法可以實現(xiàn)解除雙向綁定。所以這篇文章就來給大家詳細的介紹下angular.copy,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-11-11
  • AngularJS 的$timeout服務示例代碼

    AngularJS 的$timeout服務示例代碼

    這篇文章主要介紹了AngularJS 的$timeout服務示例代碼,需要的朋友可以參考下
    2017-09-09
  • 詳解Angular2 關于*ngFor 嵌套循環(huán)

    詳解Angular2 關于*ngFor 嵌套循環(huán)

    這篇文章主要介紹了詳解Angular2 關于*ngFor 嵌套循環(huán),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 基于angular實現(xiàn)樹形二級表格

    基于angular實現(xiàn)樹形二級表格

    這篇文章主要介紹了angular手寫樹形二級表格的完整代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10

最新評論

东台市| 云梦县| 松江区| 丰都县| 安宁市| 横峰县| 大洼县| 姜堰市| 宾川县| 黎平县| 瑞昌市| 化德县| 淳化县| 南川市| 青州市| 盐池县| 抚松县| 龙南县| 会东县| 库车县| 灵武市| 寻甸| 南平市| 区。| 会宁县| 高淳县| 体育| 府谷县| 花莲市| 无极县| 唐海县| 西充县| 南昌市| 公主岭市| 岳普湖县| 扎囊县| 南靖县| 叶城县| 朝阳县| 武乡县| 丹凤县|