跨平台开发框架Ionic学习之路------4(使用angularjs实现滚动条定位)

本文介绍了两种滚动条定位的方法:一种是使用锚点定位,通过设置HTML元素ID并结合JavaScript进行跳转;另一种是通过获取目标元素的位置直接调整滚动条位置。文章还探讨了解决多次跳转后页面无法滚动的问题。

在帮QQ群里面一个群友解决一个滚动条定位的过程中,碰到了一些问题并且解决了,写篇博客以备自己忘记了。解决滚动条定位有两种方式(目前我掌握的)

1、采用描标记的形式滚动到指定的区域。

需要跟html标签加上id属性。例如

<div class="row item-divider" id="model1"><h2>第一模块</h2></div>
然后在js脚本里面这样跳转

angular.module('todo', ['ionic'])
  .controller('TodoCtrl', function($scope, $location, $ionicSideMenuDelegate,
<span style="white-space:pre">	</span>$anchorScroll,$ionicScrollDelegate) {
    $scope.title = "项目信息";
    $scope.menus = ["Search","Browse","Playlists"];

    $scope.selectMenu = function (menu,index) {
      $scope.title = menu;
      $scope.toView("model"+(index+1));
      $ionicSideMenuDelegate.toggleLeft(false);
    }

    $scope.toggleProjects = function() {
      $ionicSideMenuDelegate.toggleLeft();
    };

    $scope.toView = function (module) {
      $location.hash(module);
      $anchorScroll();
      //移动到锚点
    };

  });

$scope.toView("id");  需要跳转到对应位置的html标签id

假如这个页面的滚动条很长,多次跳转之后就会发现页面不能上下滚动了,可能是应用标记位置之后浏览器url后面追加了##xxx=xx这样的参数导致的,如何修复不明。如有知道怎么解决的回复一下,谢谢。


2、采用修改滚动条高度。

这种方法的前提条件就是需要获取到跳转到html标签的坐标(x,y),因为只需要改变滚动条高度所以只需要获取到控件的Y轴的参数即可。

      var par = document.getElementById(module);//获取到控件js对象
     //先转为angularjs对象然后获取对应的参数
     var top = angular.element(par).prop('offsetTop');
    $ionicScrollDelegate.scrollTo(0,top);//修改滚动条位置


欢迎加入icon新手学习群,我们一起解决学习过程中遇到的问题。



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <script type="text/javascript"> function GetPageSize() { var scrW, scrH; if(window.innerHeight && window.scrollMaxY) { // Mozilla scrW = window.innerWidth + window.scrollMaxX; scrH = window.innerHeight + window.scrollMaxY; } else if(document.body.scrollHeight > document.body.offsetHeight) { // all but IE Mac scrW = document.body.scrollWidth; scrH = document.body.scrollHeight; } else if(document.body) { // IE Mac scrW = document.body.offsetWidth; scrH = document.body.offsetHeight; } var winW, winH; if(window.innerHeight) { // all except IE winW = window.innerWidth; winH = window.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { // IE 6 Strict Mode winW = document.documentElement.clientWidth; winH = document.documentElement.clientHeight; } else if (document.body) { // other winW = document.body.clientWidth; winH = document.body.clientHeight; } // for small pages with total size less then the viewport var pageW = (scrW<winW) ? winW : scrW; var pageH = (scrH<winH) ? winH : scrH; return {PageW:pageW, PageH:pageH, WinW:winW, WinH:winH}; } function GetPageScroll() { var x, y; if(window.pageYOffset) { // all except IE y = window.pageYOffset; x = window.pageXOffset; } else if(document.documentElement && document.documentElement.scrollTop) { // IE 6 Strict y = document.documentElement.scrollTop; x = document.documentElement.scrollLeft; } else if(document.body) { // all other IE y = document.body.scrollTop; x = document.body.scrollLeft; } return {X:x, Y:y}; } function main() { var div = document.getElementById("div"); for(var i=0; i<200; i++) { document.body.appendChild(document.createTextNode("Hello, World!")); document.body.appendChild(document.createElement("br")); } var sz = GetPageSize(); alert([sz.PageW,sz.PageH,sz.WinW,sz.WinH].join(", ")); window.scrollTo(0, 1500); var sl = GetPageScroll(); alert([sl.X,sl.Y].join(", ")); } </script> </head> <body onload="main();"> </body> </html>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值