日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

angular.js - $ionicScrollDelegate.getScrollPosition() 在頁面第一次進入后無法獲取相應的高度

瀏覽:306日期:2024-09-26 10:32:34

問題描述

1.是一個在網上找的時間選擇插件如圖,點擊日期彈出下面的框,在第一次啟動ionic不在這個頁面進行刷新$ionicScrollDelegate.getScrollPosition() 無法獲取到高度,如果用了scrollTo方法,高度會固定到你直接跳轉的高度,無論你如何拉動滑條都沒法獲取到高度。但是如果進行一次頁面刷新就能獲取到了,找到一個下午原因沒找到,麻煩各位大大了。

angular.js - $ionicScrollDelegate.getScrollPosition() 在頁面第一次進入后無法獲取相應的高度

angular.js - $ionicScrollDelegate.getScrollPosition() 在頁面第一次進入后無法獲取相應的高度

2.用過resize()方法,但是貌似沒什么效果。3.代碼很多:

(function () { ’use strict’; angular.module(’CoderYuan’, []).service(’timePickerService’, function () { var _this = this; //頁面中選擇器數量 default : 0 _this.globalId = 0; return _this;})/*日期時間選擇*/.directive(’timePicker’, [ ’$timeout’, ’$compile’, ’$ionicScrollDelegate’, ’$ionicBackdrop’, ’$q’, ’timePickerService’, function ($timeout, $compile, $ionicScrollDelegate, $ionicBackdrop, $q, timePickerService) {return { // template: ’<p>{{selectDateTime.show}}</p>’, restrict: ’AE’, replace: true, scope: {timePickerResult: ’=’, //雙向綁定loadDateTime: ’=’, // 用于從服務端加載(或其他方式加載時間,反正是延遲的就對了) 初始 時間日期數值 //要配合options 中的loadLazy 屬性使用 如果默認時間是從服務端加載回來的//要做如下設置 <time-picker load-date-time='data.dateTime' loadLazy='true' time-picker-result='result'></time-picker>//即 loadLazy 設置為true(默認是false)標識時間數據延遲加載 data.dateTime 是從服務端加載回來的時間數據 }, link: function (scope, elm, attrs) {var globalId = ++timePickerService.globalId;var dateTimeNow = new Date();var tem = '<p class=’pickerContainer datetimeactive’>' + '<p class=’main’>' + '<p class=’header’>{{options.title}}</p>' + '<p class=’body’>' + '<p class=’row row-no-padding’>' + '<p class=’col’ ng-if=’!options.hideYear’ ><ion-scroll on-scroll=’scrollingEvent('year')’ delegate-handle=’yearScroll_' + globalId + '’ scrollbar-y=’false’ class=’yearContent’>' + '<ul>' + '<li ng-style=’year.selected ? { color: '#000',fontWeight: 'bold', fontSize: '1.2em'}:{}’ ng-click=’selectEvent('year',$index)’ ng-repeat=’year in yearList’>{{year.text}}</li>' + '</ul>' + '</ion-scroll></p>' + '<p class=’col’ ng-if=’!options.hideMonth’ ><ion-scroll on-scroll=’scrollingEvent('month')’ delegate-handle=’monthScroll_' + globalId + '’ scrollbar-y=’false’ class=’monthContent’>' + '<ul>' + '<li ng-style=’month.selected ? { color: '#000',fontWeight: 'bold', fontSize: '1.2em'}:{}’ ng-click=’selectEvent('month',$index)’ ng-repeat=’month in monthList’>{{month.text}}</li>' + '</ul>' + '</ion-scroll></p>' + '<p class=’col ’ ng-if=’!options.hideDate’ ><ion-scroll on-scroll=’scrollingEvent('date')’ delegate-handle=’dateScroll_' + globalId + '’ scrollbar-y=’false’ class=’dateContent’>' + '<ul>' + '<li ng-style=’date.selected ? { color: '#000',fontWeight: 'bold', fontSize: '1.2em'}:{}’ ng-click=’selectEvent('date',$index)’ ng-repeat=’date in dateList’>{{date.text}}</li>' + '</ul>' + '</ion-scroll></p>' + '</p>' + '<p class=’body_center_highlight’></p>' + '</p>' + '<p class=’footer’>' + '<span ng-click=’ok()’>確定</span><span ng-click=’cancel()’>取消</span>' + '</p>' + '</p>' + '</p>';var options = { title: attrs.title || '時間選擇', height: 40,// 每個滑動 li 的高度 這里如果也配置的話 要修改css文件中的高度的定義 timeNum: parseInt(attrs.timenum) || 24,//可選時間數量 yearStart: (attrs.yearstart && parseInt(attrs.yearstart)) || dateTimeNow.getFullYear() - 80,//開始年份 yearEnd: (attrs.yearend && parseInt(attrs.yearend)) || dateTimeNow.getFullYear() , //結束年份 monthStart: 12,//開始月份 monthEnd: 1,//結束月份 DateTime: attrs.datetime && new Date(attrs.datetime) || dateTimeNow, //開始時間日期 不給默認是當天 timeSpan: attrs.timespan && parseInt(attrs.timespan) || 15, //時間間隔 默認 15分鐘一個間隔 15/30 hideYear: attrs.hideyear || false, //選擇器中隱藏年份選擇欄 hideMoth: attrs.hidemoth || false,//選擇器中隱藏月份選擇欄 hideDate: attrs.hidedate || false,//選擇器中隱藏日期選擇欄}scope.options = options;scope.yearScrollTimer = null; //年份滑動定時器scope.monthScrollTimer = null; //月份滑動定時器scope.dateScrollTimer = null; //日期滑動定時器scope.dateList = [];scope.yearList = [];scope.monthList = [];scope.selectDateTime = { year: {item: null, index: 0}, month: {item: null, index: 0}, date: {item: null, index: 0}, show: ''};scope.specialDateTime = { bigMoth: [1, 3, 5, 7, 8,10, 12], isBigMonth: function (month) {var length = this.bigMoth.length;while (length--) { if (this.bigMoth[length] == month) {return true; }}return false; }, isLoopYear: function (year) { //是否是閏年return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0); }};//進行屬性獲取和初始化scope.options = options;init(options);elm.on('click', function () { show(); // scrollToElm(scope.yearScroll, scope.yearList[scope.selectDateTime.year.index - 3]); // scrollToElm(scope.monthScroll, scope.monthList[scope.selectDateTime.month.index - 3]); // scrollToElm(scope.dateScroll, scope.dateList[scope.selectDateTime.date.index - 3]); $ionicScrollDelegate.resize();});//滑動Eventscope.scrollingEvent = function (type) { var opEntity = getOperateEntity(type); //當前存在滑動則取消 scope[opEntity.scrollTimer] && $timeout.cancel(scope[opEntity.scrollTimer]); var posi = scope[opEntity.scrollHandler].getScrollPosition(); console.log(opEntity.scrollHandler+' '+scope+' '+scope[opEntity.scrollHandler]); var index = Math.abs(Math.round(posi.top / scope.options.height)); console.log(index+' '+scope.options.height+' '+posi.top); if (posi.top == index * scope.options.height) { // console.log('meijinru gundong ');updateSelect(index + 3, type); } else { // console.log('jinru gundong ');scope[opEntity.scrollTimer] = $timeout(function () { posi.top = index * 40; updateSelect(index + 3, type); scrollToPosi(scope[opEntity.scrollHandler], posi);}, 200); }}//點擊Event// scope.selectEvent = function (type, index) {// var opEntity = getOperateEntity(type);// if (index > 2 && index <= scope[opEntity.data].length - 3) {// scrollToElm(scope[opEntity.scrollHandler], scope[opEntity.data][index - 3]);// }// }//初始化function init(options) { initYear(options); initMoth(options); initDate(options); tem = angular.element(tem); $compile(tem)(scope); angular.element(document.body).append(tem); scope.yearScroll = $ionicScrollDelegate.$getByHandle('yearScroll_' + globalId); scope.monthScroll = $ionicScrollDelegate.$getByHandle('monthScroll_' + globalId); scope.dateScroll = $ionicScrollDelegate.$getByHandle('dateScroll_' + globalId); setDateTimeShow(options.DateTime);}//從其他地方傳來的日期初始化function setDateTimeShow(datetime){ var year = datetime.getFullYear(); var month = prependZero(datetime.getMonth()+1,10); var date = prependZero(datetime.getDate(),10); scope.timePickerResult = year+'-'+month+'-'+date;}//年份初始化function initYear(options) { var defaultYear = options.DateTime.getFullYear(); var yearSpan = options.yearEnd - options.yearStart; console.log(defaultYear+' '+yearSpan); var text, data, top, item, defaultItem, defaultIndex; console.log(options.height); prependLi(scope.yearList, 3, 'b'); for (var i = 0; i <= yearSpan; i++) {text = options.yearStart + i + '年';data = options.yearStart + i;top = options.height + scope.yearList[scope.yearList.length - 1].top;item = createDateTimeLi(0, top, data, data == defaultYear, text);if (data == defaultYear) { defaultItem = item; defaultIndex = scope.yearList.length;}scope.yearList.push(item); } //設置默認選擇 scope.selectDateTime.year.item = defaultItem; scope.selectDateTime.year.index = defaultIndex; prependLi(scope.yearList, 3, 'e'); $ionicScrollDelegate.resize();}//月份初始化function initMoth(options) { var defaultMonth = options.DateTime.getMonth() + 1 == 0 ? 12 : prependZero(options.DateTime.getMonth() + 1, 10); var text, data, original, top, item, defaultItem, defaultIndex; prependLi(scope.monthList, 3, 'b'); for (var i = 1; i <= 12; i++) {original = i;data = prependZero(i, 10);text = prependZero(i, 10) + '月';top = options.height + scope.monthList[scope.monthList.length - 1].top;item = createDateTimeLi(0, top, data, data == defaultMonth, text);if (data == defaultMonth) { defaultItem = item; defaultIndex = scope.monthList.length;}scope.monthList.push(item); } //設置默認選擇 scope.selectDateTime.month.item = defaultItem; scope.selectDateTime.month.index = defaultIndex; prependLi(scope.monthList, 3, 'e'); $ionicScrollDelegate.resize();}//日期初始化function initDate(options) { //開始時間 var defaultDate = prependZero(options.DateTime.getDate(), 10); var text, data, top, item, defaultItem, defaultIndex; var dateNum = getDateNum(options.DateTime.getFullYear(), options.DateTime.getMonth() + 1); prependLi(scope.dateList, 3, 'b') for (var i = 1; i <= dateNum; i++) {data = prependZero(i, 10);text = prependZero(i, 10) + '日';top = options.height + scope.dateList[scope.dateList.length - 1].top;item = createDateTimeLi(0, top, data, data == defaultDate, text);if (data == defaultDate) { defaultItem = item; defaultIndex = scope.dateList.length;}scope.dateList.push(item); } //設置默認選擇 scope.selectDateTime.date.item = defaultItem; scope.selectDateTime.date.index = defaultIndex; prependLi(scope.dateList, 3, 'e');}function prependZero(data, num) { return data >= num ? data : '0' + data;}function createDateTimeLi(left, top, data, selected, text) { var li = {left: left, top: top, data: data, selected: selected, text: text}; return li;}function prependLi(arr, num, loc) { loc = loc || 'b'; switch (loc) {case 'b': for (var i = 0; i < num; i++) {arr.push(createDateTimeLi(0, options.height * i, '', false, '')); } break;case 'e': //最后那個li元素的 top var lastPosiTop = arr[arr.length - 1].top; for (var j = 0; j < num; j++) {arr.push(createDateTimeLi(0, (options.height * (j + 1) + lastPosiTop), '', false, '')); } break; }}//滑動到指定元素function scrollToElm(scorllHandler, elm) { $timeout(function(){scorllHandler.scrollTo(elm.left, elm.top, true)},2000);}//滑動到指定位置function scrollToPosi(scorllHandler, posi) { scorllHandler.scrollTo(posi.left, posi.top, true);}function updateSelect(index, type) { switch (type) {case 'year': //強制 $timeout(function () {scope.selectDateTime.year.item.selected = false;scope.yearList[index].selected = true;scope.selectDateTime.year.item = scope.yearList[index];scope.selectDateTime.year.index = index;resettingDate(scope.selectDateTime.year.item.data, parseInt(scope.selectDateTime.month.item.data)); //年份變化 重置日期欄 },200); break;case 'month': //強制 $timeout(function () {scope.selectDateTime.month.item.selected = false;scope.monthList[index].selected = true;scope.selectDateTime.month.item = scope.monthList[index];scope.selectDateTime.month.index = index;resettingDate(scope.selectDateTime.year.item.data, parseInt(scope.selectDateTime.month.item.data)); //月份變化 重置日期欄 }); break;case 'date': $timeout(function () {scope.selectDateTime.date.item.selected = false;scope.dateList[index].selected = true;scope.selectDateTime.date.item = scope.dateList[index];scope.selectDateTime.date.index = index; }); break; }}//獲取選中的datetimefunction getSelectDateTime() { var year, month, date, time; for (var i = 0; i < scope.yearList.length; i++) {if (scope.yearList[i].selected) { year = scope.yearList[i].data; scope.selectDateTime.year.item = scope.yearList[i]; scope.selectDateTime.year.index = i; break;} } for (var i = 0; i < scope.monthList.length; i++) {if (scope.monthList[i].selected) { month = scope.monthList[i].data; scope.selectDateTime.month.item = scope.monthList[i]; scope.selectDateTime.month.index = i; break;} } for (var i = 0; i < scope.dateList.length; i++) {if (scope.dateList[i].selected) { date = scope.dateList[i].data; scope.selectDateTime.date.item = scope.dateList[i]; scope.selectDateTime.date.index = i; break;} } if (!year) {year = scope.selectDateTime.year.item.data; } if (!month) {year = scope.selectDateTime.month.item.data; } if (!date) {date = scope.selectDateTime.date.item.data; } var value = year + '-' + month + '-' + date ; value = new Date(value); return value;}//根據年份和月份計算日期數量function getDateNum(year, month) { var dateNum = 30; if (scope.specialDateTime.isBigMonth(month)) { //大小月判斷dateNum++; } else {if (scope.specialDateTime.isLoopYear(year)) { if (month == 2)dateNum--;} else { if (month == 2)dateNum -= 2;} } return dateNum;}//重置日期選擇欄數據function resettingDate(year, month) { var dateNum = getDateNum(year, month); if (dateNum != scope.dateList.length - 6) { //數量變化 需要進行重置var text, data, top, item, defaultItem, defaultIndex;var refreshNum = dateNum - (scope.dateList.length - 6)if (refreshNum > 0) {//追加日期數量 var lastData = scope.dateList[scope.dateList.length - 4]; for (var i = 1; i <= refreshNum; i++) {data = lastData.data + i;text = data + '日';top = options.height + scope.dateList[scope.dateList.length - 4].top;item = createDateTimeLi(0, top, data, false, text);scope.dateList.splice(scope.dateList.length - 3, 0, item); }} else { //移除多余的日期數量 var refreshNum_ = Math.abs(refreshNum); scope.dateList.splice(scope.dateList.length - 4 - refreshNum_ + 1, refreshNum_); if (scope.selectDateTime.date.item.data > scope.dateList[scope.dateList.length - 4].data) {scope.dateList[scope.dateList.length - 4].selected = true;scope.selectDateTime.date.item = scope.dateList[scope.dateList.length - 4];scope.selectDateTime.date.item.index = scope.dateList.length - 4;scrollToElm(scope.dateScroll, scope.dateList[scope.selectDateTime.date.index - 3]); }} }}function getOperateEntity(type) { var entity = new Object(); var scrollTimer, scrollHandler, data, defaultSelected, selectedItem; switch (type) {case 'year': entity.scrollTimer = 'yearScrollTimer'; entity.type = type; entity.scrollHandler = 'yearScroll'; entity.data = 'yearList'; entity.defaultSelected = scope.selectDateTime.year.item.data; entity.selectedItem = 'year'; break;case 'month': entity.scrollTimer = 'monthScrollTimer'; entity.type = type; entity.scrollHandler = 'monthScroll'; entity.data = 'monthList'; entity.defaultSelected = scope.selectDateTime.month.item.data; entity.selectedItem = 'month'; break;case 'date': entity.scrollTimer = 'dateScrollTimer'; entity.type = type; entity.scrollHandler = 'dateScroll'; entity.data = 'dateList'; entity.defaultSelected = scope.selectDateTime.date.item.data; entity.selectedItem = 'date'; break; } return entity;}scope.ok = function () { var datetime = getSelectDateTime(); setDateTimeShow(datetime); hide();}scope.cancel = function () { hide();}function show() { $ionicBackdrop.retain(); tem.css('display', 'block');}function hide() { tem.css('display', 'none'); $ionicBackdrop.release();}function remove() { tem.remove();}scope.$on('$destroy', function () { remove();}) }} }]);})(window, document);

html那邊只是用了一下指令和設置了一下初始時間沒有過多的操作。

問題解答

回答1:

1.Ionic如果發布成應用,本身Input是支持手機原生的DatePicker的。所以沒有必要使用這個。2.如果不想用原生picker或者想在網頁上也能實現,官方已經提供ionic datepicker,或者NPM上的datepicker-for-ionic。

PS:原本是個平地,你非要挖坑自己跳下去,然后問別人怎么爬上來...網上隨便抓個picker拿來就用,又要調兼容又要填坑,只是降低效率。Ionic 2已經自帶DataPicker了。

相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久99蜜桃| 高清日韩欧美| 国产一区二区三区四区大秀| 欧美日韩一区自拍| 亚洲综合丁香| 韩国精品主播一区二区在线观看| 欧美亚洲色图校园春色| 美美哒免费高清在线观看视频一区二区| 蜜桃视频欧美| 久久夜夜操妹子| 日本中文字幕一区二区视频 | 中文国产一区| 久久天堂精品| 日韩欧美午夜| 999国产精品999久久久久久| 久久久久一区| 亚洲精品一二三区区别| 久久精品播放| 亚洲人www| 欧美在线看片| 欧美午夜网站| 欧美综合精品| 亚洲欧美在线专区| 亚洲一区二区三区四区五区午夜 | 亚洲欧洲专区| 亚洲精品伊人| 亚洲tv在线| 亚洲精品影视| 国产精品一区二区三区美女 | 亚洲黄色影院| 亚洲大全视频| 蜜臀久久99精品久久久画质超高清| 婷婷亚洲五月色综合| 免费观看久久av| 蜜桃av一区二区| 亚洲区欧美区| 麻豆国产欧美一区二区三区| 精品国产一区二区三区av片| 成人午夜网址| 午夜欧美精品| 亚洲1区在线观看| 精品网站aaa| 91精品亚洲| 日韩av在线播放中文字幕| 国产欧美丝祙| 精品女同一区二区三区在线观看| 日韩欧美不卡| 国精品一区二区三区| 亚洲精品高潮| 国产黄色精品| 高清一区二区| 三级一区在线视频先锋| 日韩av二区在线播放| 亚洲天堂资源| 91久久视频| 国产精品久久久久毛片大屁完整版| 国产精品成人一区二区不卡| jizzjizz中国精品麻豆| 欧美综合国产| 国产欧美一区二区三区精品观看| 国产精品成人一区二区不卡| 免费国产自久久久久三四区久久 | 亚洲欧洲日韩精品在线| 国产精品毛片久久久| 激情久久中文字幕| 伊人精品久久| 亚洲四虎影院| 婷婷综合国产| 国产精品美女午夜爽爽| aa国产精品| 日本在线视频一区二区| 久久九九电影| 日韩影片在线观看| 亚洲性视频h| 日韩和欧美一区二区| 久久久久久一区二区| 日韩三级一区| 亚洲精品国产嫩草在线观看| 国产精品一区二区中文字幕| 成人在线网站| 国产精品一区2区3区| 蜜桃国内精品久久久久软件9| 日欧美一区二区| 宅男在线一区| 欧美激情网址| 热久久免费视频| 国产成人在线中文字幕| 日本午夜精品视频在线观看| 国产综合色区在线观看| 日韩精品一级| 亚洲综合日本| 91亚洲自偷观看高清| 国产午夜一区| 蜜桃成人av| 精精国产xxxx视频在线野外| 欧美日本久久| 亚洲欧美日韩精品一区二区 | 麻豆高清免费国产一区| 日韩精品91| 日本aⅴ亚洲精品中文乱码| 91精品一区国产高清在线gif| 欧美日韩99| 日日夜夜免费精品视频| 99国产精品免费视频观看| 亚洲免费福利一区| 尤物在线精品| 日韩在线观看| 激情中国色综合| 日本综合精品一区| 热久久免费视频| 久久在线免费| 午夜欧美在线| 亚洲综合在线电影| 久久久精品国产**网站| 国产欧美高清| 亚洲免费专区| 日本一区福利在线| 国产婷婷精品| 欧美日韩水蜜桃| 国产福利片在线观看| 亚洲乱码一区| 日韩欧美中文字幕电影| 国产精品毛片| 在线亚洲自拍| 午夜精品一区二区三区国产| 精品在线播放| 狠狠躁少妇一区二区三区| 精品国产一区二| 国产美女久久| 日本免费新一区视频| 亚洲精品自拍| 自拍自偷一区二区三区| 亚洲视频播放| 丝袜美腿高跟呻吟高潮一区| 国产韩日影视精品| 99久久久久| 日韩欧美二区| 日韩在线观看| 成人午夜国产| 久久久久99| 99视频精品全部免费在线视频| 久久精品天堂| 国产探花一区在线观看| 亚洲制服一区| 亚洲神马久久| 亚洲二区三区不卡| 不卡视频在线| 欧美精品一卡| 亚洲性视频h| 中文在线不卡| 亚洲毛片视频| 日韩精品亚洲专区在线观看| 日本一区中文字幕| 精品免费视频| 水蜜桃精品av一区二区| av资源新版天堂在线| 国产一区二区三区国产精品| 免费一级欧美在线观看视频| 影音先锋久久精品| 亚洲人亚洲人色久| 日韩激情综合| 麻豆91精品视频| 日产精品一区二区| 亚洲精品网址| 亚洲天堂日韩在线| 国产精品v亚洲精品v日韩精品| 欧美韩一区二区| 91精品国产乱码久久久久久久 | 亚洲欧美日本日韩| 日韩成人一级| 欧美在线日韩| 久久久精品网| 视频一区二区中文字幕| 欧美国产先锋| 激情国产在线| 亚洲深夜福利在线观看| 日韩超碰人人爽人人做人人添| 国产h片在线观看| 免费黄色成人| 国产欧美88| 成人三级高清视频在线看| 99热精品在线| 欧美一级一区| 国产成人调教视频在线观看| 99国产精品免费视频观看| 五月天激情综合网| 日本伊人午夜精品| 日韩午夜视频在线| 福利精品在线| 久久精品高清| 欧美在线不卡| 蜜桃av.网站在线观看| 中文字幕av一区二区三区人| 国产精品羞羞答答在线观看| 久久在线免费| 日韩高清不卡在线| 九一精品国产| 国产欧美日韩视频在线| 亚洲欧洲另类| 你懂的国产精品永久在线|